类class
class Dog():
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title()+"is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + "roll over!")
d1 = Dog("huahua",3)
d1.sit()
d1.roll_over()
def init(self,name,age):
“”“初始化属性name和age”""
self.name = name
self.age = age
这里类似C++里面的初始化(析构函数)
class Dog()
{
public:
//析构函数
Dog(char name,int age)
{
m_Name = name;
m_Age = age;
}
private:
char m_Name;
int m_Age;
};
定义对象后,析构函数就开始初始化
def init(self,name,age):
定义的时候包含三个形参:self,name,age。在这个方法的定义中,形参self比不可少,还必须位于其他形参的前面。
为何必须在方法定义中包含形参self呢?因为python调用这个__init__()方法创建Dog实例时,将自动传入实参self。每个与类相关联的方法,调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够通过实参向Dog()传递名字和年龄。self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后两个形参(name和age)提供值。
Dog类海定义了另外两个方法:sit()和roll_over(),由于这些方法不需要额外的信息,如名字或年龄,因此它们只有一个形参self。
d1 = Dog(“huahua”,3)
遇到这行代码时,Python使用实参huahua和调用Dog类中的__init__(),方法__init__()创建一个表示特定小狗的实例,并使用我们提供的值来设置属性name和age。方法__init__()并未显式地包含return语句,但python自动返回一个表示这条小狗的实例。
class Dog():
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title()+"is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + "roll over!")
class Dog1(Dog):
"""特种狗的独特之处"""
def __init__(self,name,age):
"""初始化父类的属性"""
super().__init__(name,age)#这一行让Python的Dog1调用Dog中的所有属性
d1 = Dog("huahua",3)
d1.sit()
d1.roll_over()
定义几个类如下所示:
class Little_Animal():
def __init__(self,sleep):
self.sleep = sleep
class Animal():
def __init__(self,eat,drink):
self.eat = eat
self.drink = drink
self.xixi = 635536
class Cat():
def __init__(self,bark):
self.bark = bark
c1 = Cat("nihao")
print(c1.bark)
c2 = Animal("food","caffe")
print(c2.eat,c2.drink,c2.xixi)
这里开始讲super的使用
分别多次使用super
class Little_Animal():
def __init__(self,sleep):
self.sleep = sleep
class Animal(Little_Animal):
def __init__(self,eat,drink,sleep):
self.eat = eat
self.drink = drink
self.xixi = 635536
super().__init__(sleep)
class Cat(Animal):
"""这里是这样的,可以__init__自己本身的,但是继承的话,需要把继承的都放在自己定义的__init__里面,然后使用super进行重写,把需要从外部
写入的放在这里,super只能使用一次,如果出现多个继承,那么需要通过传递调用来实现
"""
def __init__(self,bark,eat,drink,sleep):
self.bark = bark
super().__init__(eat,drink,sleep)
c0 = Cat(1,2,3,"sleep")
print(c0.bark,c0.eat,c0.drink,c0.sleep)