# 定义一个Person类,属性name,age(私有)
class Person:
def __init__(self,name,age):
self.name=name
# 私有的本质, 是 Python 解释器执行代码,发现属性名或者方法名前有两个_, 会将这个名字重命名
# 会在这个名字的前边加上 _类名前缀,即 self.__age ===> self._Person__age
self.__age=age
def __str__(self):
return f'名字: {self.name}, 年龄: {self.__age}'
xm=Person('xiaoming',18)
print(xm)
# 在类外部直接访问 age 属性
# print(xm.__age) # 会报错, 在类外部不能直接使用私有属性
# 直接修改 age 属性
xm.__age=20 # 这个不是修改私有属性, 是添加了一个公有的属性 __age
print(xm)
print(xm._Person__age)
xm._Person__age=19
print(xm)
python中一切皆是对象,即使用class定义的类也是对像
方法, 使用 def 关键字定义在类中的函数就是方法
class Demo:
@classmethod
def func(cls): # 参数一般写作 cls, 表示的是类对象(即类名) class
pass
实例.方法名() # 也不需要给 cls 传参, python 解释器自动传递`
class Demo
@statucmethod
def func(): #一般没有参数
pass
类名.方法名()
实例.方法名()
'''
定义一个 Dog 类, 定义一个类属性 count,用来记录创建该类对象的个数.
(即每创建一个对象,count 的值就要加 1)实例属性 name
'''
class Dog:
count =0 #类属性
#实例属性,init方法
def __init__(self,name):
self.name=name
Dog.count +=1 #类名.类属性
print(Dog.count)
dog1=Dog('huahua')
print(Dog.count)
dog2=dog1
print(Dog.count)
dog3=Dog('xiaohei')
#使用实例对象.类属性名 来获取类属性的值((原因, 实例对象属性的查找顺序,
# 先在实例属性中找, 没有找到会去类属性中 找, 找到了可以使用, 没有找到 报错))
print(dog1.count) # 2
print(dog2.count) # 2
print(dog3.count) # 2
import random
class Game:
top_score=0
def __init__(self,name):
self.name=name
@staticmethod #方法中不需要使用 实例属性(即 self) 也不使用 类属性, 可以将这个方法定义为 静态方法
def show_help(self):
print('这是对游戏的帮助信息')
@classmethod #用到了类属性, 可以将这个方法定义为类方法,(也可以定义为实例方法)
def show_top_score(self):
print(f'当前游戏最高分为:{Game.top_score}')
def start_game(self):
newscore=random.randint(10,100)
if newscore>Game.top_score:
Game.top_score=newscore
else:
pass
print(f'本次游戏得分为:{newscore}')
return newscore
xm=Game('小明')
for i in range(10):
a=xm.start_game()
xm.show_help()
xm.show_top_score()
#class A(object)
class A:#没有写父类,但也有,object类为最原始的类
pass
class B(A):#类B继承类A,称A为父类(基类),B为子类(派生类)
pass
class Animal:
def est(self):
print('要吃东西')
class Dog(Animal)
def bark(self):
print('汪汪汪')
class XTQ(Dog)
pass
xtq=XTQ()
xtq.bark() #调用父类Dog类的方法
xtq.eat() #可以调用父类的父类中的方法
直接在子类中 定义和父类中名字相同的方法 , 直接在方法中书写新的代码
直接在子类中 定义和父类中名字相同的方法
在合适的地方调用 父类中方法 super().方法()
书写添加的新功能
class XTQ(Dog): # XTQ 类bark 方法不再是汪汪汪叫, 改为 # 1. 先 嗷嗷嗷叫(新功能) 2, 汪汪汪叫(父类中功能) 3. 嗷嗷嗷叫 (新功能)
def bark(self): print('嗷嗷嗷叫...')
# 调用父类中的代码
super().bark()
print('嗷嗷嗷叫...')