Python3 面向对象,,1.类的定义clas


1.类的定义

class People():passpeople=People()print(type(people))

输出结果:

技术图片

2.实例方法

class People():def sayHello(self):    #self是默认参数,一定要有print(‘Hello!‘)people=People()people.sayHello()

输出结果:

技术图片

3.构造函数

可以使用构造函数来初始化一个类

class People():def __init__(self,sex):self.sex=sex    #实例变量def sayHello(self):print(‘Hello!‘)people=People(‘man‘)print(people.sex)

输出结果:

技术图片

4.类变量

class People():sum=0def __init__(self,sex):self.sex=sexPeople.sum+=1    #People.sum也可以换成self.__class__.sumprint(‘现在有%d个人.‘%People.sum)def sayHello(self):print(‘Hello!‘)people1=People(‘man‘)people2=People(‘woman‘)

输出结果:

技术图片

5.类方法

class People():sum=0def __init__(self,sex):self.sex=sexself.__class__.sum+=1print(‘现在有%d个人.‘%self.__class__.sum)def sayHello(self):print(‘Hello!‘)@classmethoddef plus(cls):cls.sum+=1print(‘现在有%d个人.‘%cls.sum)people1=People(‘man‘)People.plus()people2=People(‘woman‘)People.plus()

输出结果:

技术图片

定义类方法,就需要在类的方法上面加上@classmethod,这是一个装饰器,以后会学到,默认值最好使用cls,用其他的也不会报错,调用类方法用类名.类方法名

6.静态方法

静态方法基本上与类方法相似,能用静态方法的基本也能用类方法代替,尽可能少的使用静态方法

class People():sum=0def __init__(self,sex):self.sex=sexself.__class__.sum+=1@staticmethoddef sta():People.sum+=1print(‘现在有%d个人.‘%People.sum)people1=People(‘man‘)People.sta()

输出结果:

技术图片

使用类方法调用类变量的时候直接可以用cls.xxx,但是静态方法没有默认参数,调用类变量时必须要写出类的全称,定义静态方法时要在上面加@staticmethod

7.私有

在实例方法或变量前加__,就被声明为了私有,外部不可以直接通过变量或是方法名直接访问

但是私有并不意味着真的不能在外部访问了

class People():def __init__(self):self.__sex=‘man‘def __sayHello(self):print(‘Hello!‘)people1=People()print(people1.__dict__)print(people1._People__sex)people1._People__sayHello()

输出结果:

技术图片

通过__dict__发现类中存在一个_People__sex的属性,这个其实就是我们设置的私有变量,我们在外部也是可以直接访问的,实例的方法也是一样可以在外部访问

8.继承

#Filename:cls.pyclass People():def __init__(self,name,age):self.name=nameself.age=agedef sayHello(self):print(‘Hello!‘)
import clsclass Student(cls.People):passstu=Student(‘Tom‘,18)stu.sayHello()

输出结果:

技术图片

Student类继承了People类的方法

import clsclass Student(cls.People):def __init__(self,name,age,score):self.score=scorecls.People.__init__(self,name,age)def sayHello(self):print(‘Hi!‘)stu=Student(‘Tom‘,18,90)stu.sayHello()

输出结果:

技术图片

子类扩展了父类的__init__()方法,但是调用父类的__init__方法时,必须要传入self

然后子类又重写了父类的sayHello()方法

调用父类的方法时也可以使用super()

import clsclass Student(cls.People):def __init__(self,name,age,score):self.score=scoresuper(Student,self).__init__(name,age)def sayHello(self):print(‘Hi!‘)stu=Student(‘Tom‘,18,90)stu.sayHello()print(stu.name)print(stu.age)

输出结果:

技术图片

使用super()可以不用指定父类名称

9.多继承

python可以多继承

class A():def __init__(self):print(‘a‘)class B():def __init__(self):print(‘b‘)class C(A,B):passc=C()

输出结果:

技术图片

如果父类有相同的方法,子类会优先调用先被继承的类的方法

10.多态

class C():def say(self):passclass B(C):def say(self):print(‘B‘)class A(C):def say(self):print(‘A‘)b=B()a=A()b.say()a.say()

输出结果:

技术图片

Python3 面向对象

评论关闭