1. 创建类和类变量
01-创建类以及类变量_哔哩哔哩_bilibili
class Person:
name="xiaoming" # 类变量
#定义方法
def say_hello(self):
print(f'hello {Person.name}')
if __name__=='__main__':
#1.访问类变量
print(Person.name)
#2.访问类中定义的方法
#实例化类
p = Person()
p.say_hello()
在类的内外部获取类变量值,直接使用[类名].[变量名] 即可获取。
在类的外部调用方法,需要先实例化类,再使用[实例化对象名].[方法名] 获取。
实例化以后 ,也可以通过[实例化对象名].[变量名]获取变量值。
1.1 变量值的修改
02-使用构造器创建实例变量_哔哩哔哩_bilibili
注意两种修改方式,对值的影响。
1)修改实例化后的变量值,只会改变该实例化的值——其他实例化的类对象中的值不改变。
2)直接对[类名].[变量名]改变变量值会从本质上改变这个类变量,换句话说,会对之后所有访问这个类变量的实例也做修改。(全局修改)
构造器:__int__ 这个特殊的方法就叫做构造器
self 就叫做实例变量,self都指向实例化过程中自定义的那个对象。
class Person:
def __init__(self,name): #构造器
self.username = name # 可以无限定义实例变量,可以通过参数传入
self.age = 10 # 可以无限定义实例变量,可以写死
def say_hello(self):
print(f'hello {self.username}') #调用时使用self.[变量名]
if __name__=='__main__':
p1=Person('张三')
p1.say_hello()
#看个意思,这段代码跑不了,因为中英文符号问题。
3. 类变量和实例变量的区别
03-类变量与实例变量的区别_哔哩哔哩_bilibili
self.up的写法:表示获得的是在不同的实例下给定的up的值。
Employee.up 的写法:写死了,固定取这个类下定义的up的值,0.1。
两种写法的区别体现在:
这样写的时候,第一种写法实际乘0.2,第二种写法实际乘0.1。
4. 类的继承
04-类的继承_哔哩哔哩_bilibili
1) 继承的例子1:
在创建类的时候,把父类的类名写在括号里,就可以继承父类的所有的方法——像调用父类的方法那样,调用实例化以后的子类里的方法。甚至可以在子类里面啥都不写,也ok。但父类规定的传参规则,实例化子类时需要满足。比如例子中,实例化Dog时也需要传两个参数name和legs进去。
2)继承的例子2:
返回:
注意:如果子类和父类中的方法名字重复了,子类会覆盖掉父类方法——调用子类时,只有子类的方法生效。
5. 类的私有变量
05-类的私有变量和私有方法_哔哩哔哩_bilvv
1)私有变量
在变量名前面加两个下划线,表示私有变量,不可继承到子类去。
或者说,子类访问不到父类里面的私有变量,只能在父类内部进行使用。
2)私有方法
同理,方法名前面加两个下划线可以表示私有方法,只有类内部可以调用,不可以继承。起到保护作用。
class 类名(object):
def __方法名(self):
方法体
5. 类的属性方法
06-类的属性方法_哔哩哔哩_bilibili
在方法上一行写一个@property的装饰器,就可以像访问属性那样([类名].[属性名])去调用方法([类名].[方法名]())
注意: