类与方法下面展示一些
内联代码片`。
#-----2021 04 19 22.05-------属性和方法
#类中的定义属性和方法都是公共的,且遵守双亲委派机制
class person:
name = "swk"
teacher = "tangseng"
def say_hello(self):#默认传递一个参数,所以方法中至少要定义一个形参
#例如 如果是p1调用,则第一个参数就是p1
print('你好,我是 %s'%self.name)
p1 = person()
p2 = person()
print(p1.name,p2.name)
print(p1.teacher,p2.teacher)
#当我们调用一个对象的属性时,解析器会现在当前对象中寻找是否含有该属性
#如果没有,则去当前的类对象寻找,有则返回,没有则报错
#类和对象都可以保存属性(如果这个属性是所有实例共享的,则保存到类对象里面)(如果是某个实例所独有的,就应该保存到实例对象中)
#一般情况下,属性保存到实例,方法保存到类
#修改name属性
p1.name = "zhubajie"
p2.name = "shaheshang"
print(p1.name,p2.name)
#调用类中的函数
p1.say_hello()
p2.say_hello()
#-----类的特殊方法init------------
class person_2 :
def say_hello(self):
print("hello , my teacher is %s" %self.teacher)
#注意这里没有teacher属性,我们却希望对象的属性创建是自动的。
#如果手动添加,容易遗忘,所以在类中可以定义一些特殊方法(魔术方法)
#特殊方法不需要我们自己调用,它会在特殊时刻解析器自动调用
def __init__(self,teacher):#这个魔术方法在每次使用类创建一个对象时执行
print("init方法执行了")
self.teacher = teacher #初始化
#程序执行顺序1.创建一个变量
#2.在内存中创建一个新对象
#3.__init__(self)执行(对象创建后立即执行)
#4.将对象的id赋值给变量
#5.结束
p3 = person_2("lyc")#因为self是解析器自己传入,所以1传入的参数从teacher开始也就是从第二个参数开始
#类的基本结构
#lass 类名([父类]) :
# 公共的属性
# def __init__(self):
# ..
#
#其他的方法
# def method_1(self,..):
# def method_2(self,...)
#练习: 定义一个狗狗的类属性 name age gender height,方法jiao() yao() run()