1.类的成员
在类中你能写的所有内容都是类的成员
class 类名:
# 方法
def __init__(self, 参数1, 参数2....):
# 属性变量量
self.属性1 = 参数1
self.属性2 = 参数2
....
# ⽅法
def method(self):
pass
2.变量
1.实例变量:每个实例都该拥有的变量,由对象去访问的变量. 比如,认得名字,人的爱好每个人的个人信息
2.类变量:这一类事物同意拥有的变量. 此时.这个变量属于类.但是对象也可以访问. 比如,中国人都拥有同一个国家
class Person:
# 类变量, 表示所有的该类的对象都共享这个变量.
country = "中国"
def __init__(self, name, num, birthday):
# 实例例变量(字段) 表示你创建的每一个人都有这三个变量
self.name = name
self.num = num
self.birthday = birthday
p1 = Person("mike", 18, "1999年")
print(p1.name) # mike
print(p1.country) #中国
p2 = Person("bob", 28, "1999年")
print(p2.name) # bob
print(p2.country) # 中国
实例变量中都隐藏着一个创建这个对象的类.通过这个类就能找到我们类中定义的全部内容,包括方法和属性信息等
p1 = Person("mike", 18, "1999年")
p1.country = "美国"
print(p1.name)
print(p1.country) # 美国
p2 = Person("bob", 28, "1999年")
print(p2.name)
print(p2.country) # 中国
上面这里其实并没有改变类变量,只是在p1中添加了一个实例变量. 类变量最好是用类名访问,通过对象名也可以访问,但只能看,不能改变,如果想要改变它.需要用类名来改变
class Foo:
count = 0
def __init__(self):
Foo.count += 1
print(Foo.count) # 0
Foo()
Foo()
Foo()
print(Foo.count) # 3
实例变量,给对象用的.
类变量,多个对象共享的.
3.方法
1.实例方法(成员方法): 使用 对象.方法() 说白了对象直接访问的方法叫成员方法.
特点: 在声明的时候.需要给出self,self必须放在第一个位置,在调用的时候,自动的会把对象传递给形参的self
class Computer:
# 实例方法(成员方法)
def play(self):
print("我的电脑可以玩儿")
c = Computer()
c.play() # 对象直接去调用实例方法
2.类方法(@calssmethod):类方法是属于类的
特点:在声明的时候需要给出一个能够接受类名的参数,cls,也必须在调用的时候,自动的把xx对象的类传递给cls
class Computer:
def play(self):
print("我的电脑可以玩儿")
@staticmethod
def fare():
print("我的电脑非常厉害, 可以煎鸡蛋")
@classmethod
def cal(cls, a, b):
print(cls)
return a+b
print(Computer.cal(1, 2)) # 此时会自动的把类名传递给类方法的第⼀个参数
3.静态方法(@staticmethod): 静态方法也是属于类的.静态方法就好比,我们在类中定义了一个函数,静态方法一般和类方法差不多.使用类名去访问
@staticmethod
def fare():
print("我的电脑⾮常厉害, 可以煎鸡蛋")
静态⽅法和静态变量一样. ⼀般都是使⽤类名直接访问和调用的.
Computer.fare() # 类名可以直接访问的
c.fare() # 对象也可以访问. 但最好不要这么干. 以便于区分静态方法和实例方法
4.属性
在方法上添加一个@property.可以把一个方法变成一个属性,但是这个属性不可以被赋值,当我们某一个属性必须经过计算才能得到结果的时候
class Person:
def __init__(self):
pass
@property
def age(self):
return 1
p = Person()
age = p.age
print(age)
1.比如保存出生年月日用程序来计算年龄.对于年龄来说,应该是一个数值
2.调用的时候,直接当成属性变量来用就可以了.
3.这样只能取值,不能设置值
5.私有
所有以双下滑线开头的方法,变量都是私有内容.外界无法访问.除非你主动暴露这些内容
1.私有变量
私有的内容不能直接访问.但是如果对方开辟了外界访问的通道(公共方法). 那可以通过这个公共的方法来获取到私有的内容,类变量(静态变量)一样拥有这样的属性
2.私有方法
class Person:
def __init__(self):
pass
def __yue(self):
print("我要约会")
def job(self):
print("我要工作")
self.__yue() # 在自己类中访问自己的其他方法. 哪怕是私有的. 也是自己在用
p = Person()
p.job()
对于私有方法,子类是无法继承的
class Fu:
__q = "嘻嘻"
class Zi(Fu):
pass
print(Zi.__q) # 报错
总结: