day 23 面向对象中类的成员 和嵌套
1、类的成员? 变量、方法、属性
class Foo: # 方法
def __init__(self,name):
# 实例变量/字段
self.name = name # 方法
def func(self):
pass # obj,Foo类的对象
# obj,Foo类的实例
obj = Foo('朱奎峰')
变量:1、实例变量(字段)
2、类变量(静态字段)
实例一:
class Foo:
# 类变量(静态字段)
country = "中国" def __init__(self,name):
# 实例变量(字段)
self.name = name def func(self):
pass obj1 = Foo('季红')
obj2 = Foo('王晓东') Foo.country 思考题: 如何验证儿子都不知道私有字段的存在. 无法访问:
class Base(object):
__secret = "受贿" class Foo(Base): def func(self):
print(self.__secret)
print(Foo.__secret) obj = Foo()
obj.func() 可以访问:
class Base(object):
__secret = "受贿" def zt(self):
print(Base.__secret) class Foo(Base): def func(self):
print(self.__secret)
print(Foo.__secret) obj = Foo()
obj.zt()
实例
方法:1、实例方法
2、静态方法
3、类方法 @classmethod
- 实例方法
class Foo(object):
def __init__(self, name):
self.name = name # 实例方法
def func(self):
print(self.name) obj = Foo('..')
obj.func() - 静态方法
class Foo(object):
def __init__(self, name):
self.name = name # 静态方法,如果方法无需使用对象中封装的值,那么就可以使用静态方法
@staticmethod
def display(a1,a2):
return a1 + a2
Foo.display(1,3) - 类方法
class Foo(object): # 类方法,cls是类
@classmethod
def show(cls,x1,x2):
print(cls,x1,x2) # 执行类方法
Foo.show(1,8) 面试题: 静态方法/类方法和实例方法的区别? 属性(通过方法改造出来):
示例:
class Foo(object):
def __init__(self):
pass @property
def start(self):
return 1 @property
def end(self):
return 10 obj = Foo()
print(obj.start)
print(obj.end)
"""
# 总结:
# 1. 编写时
# - 方法上方写 @property
# - 方法参数:只有一个self
# 2. 调用时:无需加括号 对象.方法
# 3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @property
"""
@staticmethod 静态方法 ,如果方法无需使用对象中封装的值,那么就可以使用静态方法@staticmethod,放在定义的函数前面
def display(a1,a2):
属性: 通过方法改造出来
class Foo(object):
def __init__(self):
pass @property
def start(self):
return 1 @property
def end(self):
return 10 obj = Foo()
print(obj.start)
print(obj.end)
"""
# 总结:
# 1. 编写时
# - 方法上方写 @property
# - 方法参数:只有一个self
# 2. 调用时:无需加括号 对象.方法
# 3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @property
"""
2、静态方法、类方法和实例方法的区别?
定义 静态方法、类方法定义的时候需要添加@ ,实例方法不需要添加
执行 静态方法、类方法执行时通过类. 可以直接调用, 实例方法 先实例化,然后通过对象. 调用
应用场景?
如果在方法内部不会用到对象相关的数据时,就可以用静态 和类
如果需要用到对象 用实例方法
如果在代码中会用到当前类,为了省事可以用类方法
3、属性:
嵌套
面向对象:
"""
创建三个学校且三个学校的设施内容等都是一致.
""" class School(object):
def __init__(self, name, address):
self.name = name
self.address = address def speech(self):
print('讲课') obj1 = School('老男孩北京校区', '美丽富饶的沙河')
obj2 = School('老男孩上海校区', '浦东新区')
obj3 = School('老男孩深圳校区', '南山区')
class Teacher(object):
def __init__(self, name, age, salary):
self.name = name
self.age = age
self.__salary = salary
self.school = None t1 = Teacher('李杰', 19, 188888)
t2 = Teacher('艳涛', 18, 60)
t3 = Teacher('女神',16, 900000)
# ############## 老师分配校区
t1.school = obj1
t2.school = obj1
t3.school = obj2
# ####################################
# 查看t1老师,所在的校区名称/地址
print(t1.school.name)
print(t1.school.address)
print(t1.name)
print(t1.age)
t1.school.speech() 准则: 字段和方法的归类. 以前:
[
{"name":'alex1','age':18,xxx:999},
{"name":'alex2',age':18},
]
day 23 面向对象中类的成员 和嵌套的更多相关文章
- 文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式
本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述, ...
- JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买 ...
- python全栈开发 * 23 面向对象 知识点汇总 * 180704
23 面向对象 -----特殊方法 1. isinstance(obj,类名) 判断对象是否是此类实例化或者此类的子类实例化出来的class A:passclass B(A):passb1=B()pr ...
- C#中类的成员
一.C#中类的成员 1. 类的成员 类中的数据和函数都称为类的成员.类的成员可以分为两类: ?类本身所声明的. ?从基类中继承来的. 如果在类声明中没有指定基类,则该类将继承System.Object ...
- Java面向对象——类的成员
Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean ...
- Java基础语法(9)-面向对象之类的成员
title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...
- Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
- C# 中类的成员有哪些?
类(class)是C#类型中最基础的类型.类是一个数据结构,将状态(字段)和行为(方法和其他函数成员)组合在一个单元中.类提供了用于动态创建类实例的定义,也就是对象(object).类支持继承(inh ...
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- APP打包设置程序版本号
正确设置方式是: 注意,以下修改不会起作用<manifestxmlns:android="http://schemas.android.com/apk/res/android" ...
- unity UI事件
由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_source=tuico ...
- 透明度设置opacity
透明度设置opacity属性 示例 <!DOCTYPE html> <html> <head> <style> div { background-col ...
- 数据文件包解析工具类 RandomAccessFile
public class ReadTextFile { public static void main(String[] args) { pic2txt(); parseFrmFile(); //ur ...
- 【排列组合】给定一个M*N的格子或棋盘,从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)
版权声明:本文为CSDN博主「梵解君」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/hadeso/art ...
- 盘点一下Creator星球上的开源工具包!
晓衡开始写公众号,最早是从上架 Cocos 商店的 pbkiller 插件开始的,到至今有2年2个月了.在这期间,又陆续在公众号上分享了多个实用工具包,在这里统一盘点一下,方便与大家交流学习. 一.u ...
- CSPS模拟 80
题还没改完就来臭不要脸的写反思了. (主要因为太困了懒得改了) (还因为T2看起来太过弱智) (也许等我生物钟恢复正常后能当做课余消遣水一水) statistic:skyh接了两杯水,真能喝啊 然后他 ...
- 部署https并自动续期
1.其它步骤参考地址https://blog.csdn.net/achenyuan/article/details/79021340https://blog.csdn.net/Dancen/artic ...
- C#中的取整函数
先放百度的 Math.Ceiling();向上取整 Math.Ceiling()向上取整: d = 4.56789 string res = Math.Ceiling(Convert.ToDecima ...
- JavaScript部分案例
JavaScript 是 Web 的编程语言. 所有现代的 HTML 页面都使用 JavaScript. JavaScript 非常容易学. 阅读本教程,您需要有以下基础: HTML 教程 CSS 教 ...