类和对象
类属性和实例属性:
- 类属性:所有的成员都是一样的,可后天学习
- 实例属性:不是每个人员都一样
类属性和实例属性的区别:
- 类属性:类只能获取类属性
- 实例属性:可以获取 实例属性和类属性
实例1:
class Student(object):
school = "usc" #类属性
def __init__(self):
self.name = "csdn" #实例属性
self.age = 24 #实例属性
new_stu = Student()
print(new_stu.school) #打印结果:usc
print(new_stu.name) #打印结果:报错,AttributeError: 'Student' object has no attribute 'name'
print(new_stu.age) #打印结果:报错,不能在类外通过类对象访问私有的类属性
-----------------------------------------------------------------------------------------------------
实例2:
class Student(object):
school = "usc"
def __init__(self):
self.name = "csdn"
self.age = 24
new_stu = Student()
new_stu.age = 26
print(new_stu.school) #打印结果:usc
print(new_stu.name) #打印结果:csdn
print(new_stu.age) #打印结果:26
实例3:
class Man:
gender = "man"
age = 24
power = "strong"
one_man = Man()
two_man = Man()
print(one_man.gender) #打印结果:man
print(two_man.gender) #打印结果:man
one_man.face = "yello"
print(one_man.face) #打印结果:yello
print(two_man.face) #打印结果:报错,AttributeError, 属性错误,获取不到定义给one_man的face
print(Man.face) #打印结果:报错,AttributeError, 属性错误,获取不到定义给one_man的face
方法
方法
- 表示类、对象的行为
- 方法本质上是函数
各个方法
- 实例方法:实例具备的,类不一定具备。 类不能调用实例方法
- 类方法: 类具备的, 实例可以获取
- 静态方法:放在类里面的函数
实例方法,对象方法
- 第一个参数名称,规定是 self
- 实例方法在调用的时候,前缀是对象,不能是类
类方法
- 在方法的上面添加 @classmethod
- 把实例方法当中的 self 改成 cls
静态方法
- 静态方法表示: 方法的上面加上一个 @staticmethod
- 不需要用 self, cls 作为固定参数
实例:
class Man:
gender = "man"
age = 24
power = 'strong'
@staticmethod #静态方法
def wearther():
print("weather is good")
@classmethod #类方法
def eat(cls):
print("pizza")
return ("is good")
def drink(self):
self.drink = "juice"
#静态调用方法
Man.wearther() #打印结果:weather is good
Man().wearther() #打印结果:weather is good
#类调用方法
print(Man.eat()) #打印结果:pizza is good
print(Man().eat()) #打印结果:pizza is good
初始化和self
初始化
- 要通过定义的类得到一个具体的对象。 生出来,造出来。
实例属性的定义
- 类外面:对象名.属性
- 类里面:self.属性
init 定义的形式参数 和 对象的实例化的实际参数,是一一对应的
- 必须return None
- 传入的参数必须要设置成实例属性,才能被被对象访问到
self:在 类里面 ,表示一个 对象
cls:在 类里面 ,表示一个 类扫描二维码关注公众号,回复: 12462147 查看本文章
实例:
class Man:
# 定义类属性
gender = '男'
power = "强"
handsome = 'very very'
def __init__(self, name, face_shape='圆脸'):
"""对象的初始化过程。 让对象之间长得不太一样。"""
# 定义, 在类里面,定义实例属性使用 self.属性 = ...
self.face = face_shape
self.name = name
@staticmethod
def tianqiyubao():
print("天气预报:今天是晴天。")
@classmethod
def eat(cls):
print("正在吃饭")
print(cls.power)
return "hello world"
def drink(self, brand):
"""喝。。。"""
print("{} 正在喝 {} 酒".format(self.name, brand))
# self.play_game()
self.eat()
# 定义实例属性
self.single = False
def play_game(self):
"""玩游戏"""
print("玩游戏")
yuz = Man('yuz', '方脸')
# print(yuz.face)
# print(yuz.name)
# yuz.drink('茅台')
# 整容的权利,可以后天改变属性
# yuz.face = "帅脸"
# print(yuz.face)
# 初始化以后 。 single 属性是后天定义的,
yuz.drink('五粮液')
print(yuz.single)
yuz.single = True
print(yuz.single)