面向对象--类,嵌套
Posted wangjun187197
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象--类,嵌套相关的知识,希望对你有一定的参考价值。
一:类的成员:
例:
class Foo: #创建类 #方法 def __init__(self,name): #实例变量/字段 self.name = name #方法 def func(self): pass #obj.Foo类的对象 #obj.Foo类的实例 obj = Foo(‘四大龙王‘)
成员分为三类: 字段 - 方法 - 属性
字段(变量):
- 实例变量(字段)
-公有实例变量(字段)
class Foo: def __init__(self,name): self.name = name self.age = 123 def func(self): print(self.name) obj = Foo(‘李哥‘) print(obj.name) print(obj.age) obj.func()
-私有实例变量(字段)
class Foo: def __init__(self,name): #私有实例变量(私有字段) self.__name = name #私有 self.age = 123 def func(self): print(self.__name) obj = Foo(‘小狗‘) print(obj.age) #obj.__name #无法访问 obj.func() #找到一个内部:func, 让func帮助执行内部私有__name
-类变量(静态字段)
-公有类变量(静态字段)
class Foo: country = "中国" def __init__(self): pass def func(self): #内部调用 print(self.country) print(Foo.country) #推荐 #外部调用 print(Foo.country) obj = Foo() obj.func()
-私有类变量(静态字段)
class Foo: __country = "中国" def __init__(self): pass def func(self): #内部调用 print(self.__country) print(Foo.country) #推荐 #外部无法调用私有类变量 #print(Foo.country) obj = fooc() obj.func()
字段:
class Foo: #类变量(静态字段) country = "中国" def __init__(self,name): #实例变量(字段) self.name = name def func(self): pass """ 准则: 实例变量(字段)访问时,使用对象访问,即:obj.name 类变量(静态字段)访问时,使用类方法,即Foo.country (实在不方便的时候才用对象访问)
"""
什么时候使用变量?
当所有对象中有共同的字段时要改都改,要删都删时,可以将实例变量(字段)提取到类变量(静态字段)
方法:
方法分为:
-实例方法:由对象调用,至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self.
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)
-类方法:由类调用,至少一个cls参数,执行类方法时,自动将调用该方法的类赋值给cls.
class Foo(object): #类方法,cls是类 @classmethod def show(cls,x1,x2): print(cls,x1,x2) #执行类方法 Foo.show(1,8)
方法包含:实例方法,静态方法,类方法,三种方法在内存中都归属于类,区别在于调用方式不同.
属性
1:属性的基本使用
# ##############定义############### class Foo: def func(self): pass #定义属性 @property def prop(self): pass # ###############调用############### foo_obj = Foo() foo_obj.func() foo_obj.prop #调用属性
Python的属性的功能是:属性内部进行一系列的逻辑计算,最终将计算结果返回。
注意:
在定义时,在方法上添加@property;
属性仅有一个self参数
无需使用括号
方法: foo_obj.func()
属性:foo_obj.prop
属性存在的意义是:访问属性时可以制造出和访问字段完全相同的假象
属性通过方法改造出来,如果Python中没有属性,方法完全可以替代其功能
2.属性的两种定义方式
属性的定义有两种方式:
装饰器 即:在方法上应用装饰器
静态字段 即:在类中定义值为property对象的静态字段
二:嵌套
""" 创建三个学校且三个学校的设施内容等都是一致. """ 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() # 准则: 字段和方法的归类.
以上是关于面向对象--类,嵌套的主要内容,如果未能解决你的问题,请参考以下文章