Python3 面向对象,,1.类的定义clas
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 面向对象
评论关闭