- 私有属性:属性名以两个下划线开头
假的私有属性
//实际开发中,声明类的属性,很少会使用真正的私有属性和公开属性(前面加两个下滑线的)。
实际对属性的要求:1.可以通过点语法方便的来给属性赋值或者拿到它的值(不能是私有的)
假的私有属性满足要求: 就使用假的私有属性 + getter和sette
- 声明私有属性,属性名前加一个下划线(这个是规范,不是语法:带一个下划线的属性,不要直接通过一个下划线对应的属性名去访问这个属性)
- 通过给属性添加getter和setter来限制赋值和获取值的过程
a. 添加getter: --> 限制获取属性值的操作
b. getter的作用:返回属性的值
-
添加getter
@property def 属性名去掉下划线(self): 其他任何操作 return self.带下划线的属性名
-
添加setter
@属性名去掉下划线.setter def 属性名去掉下划线(self, 参数): 其他任何操作 self.带下划线的属性名 = 参数
-
在类的外部通过不带下划线的属性去获取属性的值,或者给属性赋值
示例一:class Person def _ _init _ _(self, name=' ' ,age=0) : self.name = name self.age = age #给name属性添加getter @property def name(self): if len(self.name) == 0: return '空' return self.name #给name属性添加setter @name.setter def name(self, name1) : if isinstance(name1, str): self.name = name1 p1 = Person(' 小明')
//getter一般要添加,setter一般不用写
//如果要添加setter必须添加getter
类字段和类方法
1.类字段就是类属性:通过类去获取
类字段是声明在类里面,函数外面的变量
class Person:
"""人类"""
# 这个person_num就是一个类字段
person_num = 0
2.类方法:通过类去调用
开发中怎么确定 声明 方法是对象方法还是类方法:看实现的功能是否需要对象属性来支持,如果需要就必须声明称对象方法
@classmethod来说明下面的函数是一个类方法 --> 函数修饰符
# 所有的类方法都有一个默认参数cls,这个参数不需要传参,系统会自动将调用方法的类传给它(谁调用指向谁)
@classmethod
def hurt_earth(cls):
print(cls)
print('人类伤害破坏环境,伤害地球', Person.person_num, cls.person_num)
//类字段要用类去使用
print(Person.person_num)
//通过Person类调用类方法
Person.hurt_earth()
print(Person)
-
静态函数:在类中声明,由类来调用的方法
class Math: """数学类""" #multiply就是一个静态方法 @staticmethod def multiply(num1, num2): return num1 * num2
静态方法需要使用类来调用
print(Math.multiply(10, 4))
示例二:静态方法和类方法的区别
静态方法和类方法都是通过类去调用
区别:
- 类方法都有一个默认参数cls指向调用方法的类,但是静态方法没有
- 类型不一样,静态方法的类型是function,类方法的类型是method
网友评论