类,对象,属性,方法
class TheFirstDemo:
'''这是一个学习Python定义的第一个类'''
# 下面定义了一个类属性
add = 'http://c.biancheng.net'
# 下面定义了一个say方法
def say(self, content):
print(content)
在创建类时,我们可以手动添加一个 ____init__() 方法,该方法是一个特殊的类实例方法,称为构造方法(或构造函数)。init() 方法可以包含多个参数,但必须包含一个名为 self 的参数,且必须作为第一个参数.
定义类的对象(实例化)的方法: 类名(参数)
定义类时,如果没有手动添加 init() 构造方法,又或者添加的 init() 中仅有一个 self 参数,则创建类对象时的参数可以省略不写。
self 代表该方法的调用者,即谁调用该方法,那么 self 就代表谁。
class Person:
def __init__(self):
print("正在执行构造方法")
# 定义一个study()实例方法
def study(self):
print(self,"正在学Python")
zhangsan = Person()
zhangsan.study()
lisi = Person()
lisi.study()
上面代码中,study() 中的 self 代表该方法的调用者,即谁调用该方法,那么 self 就代表谁。因此,该程序的运行结果为:
正在执行构造方法
<main.Person object at 0x0000021ADD7D21D0> 正在学Python
正在执行构造方法
<main.Person object at 0x0000021ADD7D2E48> 正在学Python
类方法与实例方法
python类封装
1.默认情况下,Python 类中的变量和方法都是公有(public)的,它们的名称前都没有下划线(_);
2.如果类中的变量和函数,其名称以双下划线“__”开头,则该变量(函数)为私有变量(私有函数),其属性等同于 private。
python类继承
子类拥有父类所有的属性和方法,即便该属性或方法是私有(private)的。使用多继承经常需要面临的问题是,多个父类中包含同名的类方法。对于这种情况,Python 的处置措施是:根据子类继承多个父类时这些父类的前后次序决定,即排在前面父类中的类方法会覆盖排在后面父类中的同名类方法。
super():子类中定义构造方法,必须在该方法中调用父类的构造方法。调用父类构造方法的方式有 2 种,分别是:
1.类可以看做一个独立空间,在类的外部调用其中的实例方法,可以向调用普通函数那样,只不过需要额外备注类名(此方式又称为未绑定方法);
2.使用 super() 函数。但如果涉及多继承,该函数只能调用第一个直接父类的构造方法。
super().init(self,···)
class People:
def __init__(self,name):
self.name = name
def say(self):
print("我是人,名字为:",self.name)
class Animal:
def __init__(self,food):
self.food = food
def display(self):
print("我是动物,我吃",self.food)
class Person(People, Animal):
#自定义构造方法
def __init__(self,name,food):
#调用 People 类的构造方法
super().__init__(self,name)
#super(Person,self).__init__(name) #执行效果和上一行相同
#People.__init__(self,name)#使用未绑定方法调用 People 类构造方法
#调用其它父类的构造方法,需手动给 self 传值
Animal.__init__(self,food)
per = Person("zhangsan","熟食")
per.say()
per.display()