python017
核能来袭-成员
本节主要内容:
1.类的成员
2.类的成员-变量
3.类的成员-方法
4.类的成员-属性
5.私有
一.类的成员:
首先, 什什么是类的成员. 很简单. 你能在类中写什什么? 写的内容就是成员. 到⽬目前为⽌止. 我们已经学过一些了成员了.
class 类名: #方法 def __init__(self,参数1,参数2...): #属性变量 self.属性1=参数1 self.属性2 = 参数2 ... #方法 def method(self): pass
在上⾯面代码中__init__和method都属于类的成员方法. 又称为实例方法. 总之这样的东西需要用对象来访问. 而上方的self.属性1 = 参数1 这个代码的含义是给对象设置属性信息. 含义是这个对象的xxx属性是xxxx. 这种东西又被称之为成员变量量或者实例变量, 再或者被称之为字段. 都是一个意思. 也就是说在类中, 是存在着实例变量和实例方法的. 还有哪些呢? 一个⼀个的看.
二.类的成员-变量
在类中变量分成两大类:
1.实例变量(字段)
2.类变量(静态变量)
实例变量就是每个实例都应该拥有的变量.比如:人的名字,人的爱好,每个人的个人信息,都属于实例变量.
class Person: #类变量,表示所有的该类的对象都共享这个变量 country="中国" def __init__(self,name,num,birthday): #实例变量(字段) 表示你创建的每一个人都有这三个变量 self.name=name self.num=num self.birthday=birthday p1=Person("alex",18,"1840年06月01日") print(p1.name) #alex print(p1.country) #中国 p2=Person("wusir",28,"1894年07月25日") print(p2.name) #wusir print(p2.country) #中国
我们发现对象p1和p2的name都是对象自己的.但是country是类的.大家公用同一个变量如何来如何验证呢?
class Person: #类变量,表示所有的该类的对象都共享这个变量 country="中国" def __init__(self,name,num,birthday): #实例变量(字段) 表示你创建的每一个人都有这三个变量 self.name=name self.num=num self.birthday=birthday p1=Person("alex",18,"1840年06月01日") print(p1.name) #alex print(p1.country) #中国 p2=Person("wusir",28,"1894年07月25日") print(p2.name) #wusir print(p2.country) #中国 Person.country="大清" #在这里,我把国家改成大清 p1=Person("alex",18,"1840年06月01日") print(p1.name) print(p1.country) #alex是大清的 p2=Person("wusir",28,"1894年07月25日") print("p2.name") print(p2.country) #wusir也是大清的
案例.通过程序来记录当前类被创建了多少个对象.
class Foo: count=0 def __init__(self): Foo.count+=1 print(Foo.count) Foo() Foo() Foo() print(Foo.count)
总结:实例变量,给对象用的
类变量,多个对象共享的.最好是用类名来访问.这样就更加规范.
二.类的成员方法
1.成员方法(实例方法)
2.静态方法
3.类方法
class Person: def __init__(self): pass # 实例方法需要传递类的对象 self def think(self): print("人能思考") # 静态方法不需要传递对象或者类 @staticmethod # 静态方法 def jisuan(a, b): print("我来过这里") return a + b # 类方法: 第一个参数传递的是类名 @classmethod def clsMethod(cls): # cls表示的类 p = cls() # 可以动态的创建对象. print("我是一个类方法", p) p = Person() p.think() Person.think(p) #静态方法的调用: c = Person.jisuan(1, 2) # 类名可以访问 print(c) p = Person() d = p.jisuan(3, 5) # 用对象也可以访问 print(d) #记住, 静态的内容用类名访问 Person.clsMethod() # 类方法默认第一个参数接收的是类名
三.类的成员-属性
class Person: def __init__(self, name, num, gender, birthday): self.name = name self.num = num self.gender = gender self.birthday = birthday @property # 表示当前方法是一个属性. 方法的返回值就是这个属性的值 def age(self): # 方法只能有一个参数, self return 10 # 必须有返回值 p = Person("alex", "10086", "不详", "1989年12月1日") print(p.age) # 可以直接访问属性, 实际上访问的是age()方法. 返回值就是属性值
四.私有
class Tiger: def __init__(self, name, waibiao, qingzhenglianjiedezuofeng, qingfu, money, fangchan): self.name = name self.waibiao = waibiao self.qingzhenglianjiedezuofeng = qingzhenglianjiedezuofeng self.__qingfu = qingfu self.__money = money self.__fangchan = fangchan def buy(self): print("我有%s" % self.__money) self.__sel() def __sel(self): print("我要卖掉%s" % self.__fangchan) lh = Tiger("alex", "正直", "非常刚正不阿, 666", "小潘潘", 10000000000, 5) print(lh.qingzhenglianjiedezuofeng) print(lh.name) print(lh.waibiao) lh.buy() # lh.__sel() # print(lh.__money)