Python3 面向对象
Posted zmqqq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 面向对象相关的知识,希望对你有一定的参考价值。
1.类的定义
class People():
pass
people=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=0
def __init__(self,sex):
self.sex=sex
People.sum+=1 #People.sum也可以换成self.__class__.sum
print(‘现在有%d个人.‘%People.sum)
def sayHello(self):
print(‘Hello!‘)
people1=People(‘man‘)
people2=People(‘woman‘)
输出结果:
5.类方法
class People():
sum=0
def __init__(self,sex):
self.sex=sex
self.__class__.sum+=1
print(‘现在有%d个人.‘%self.__class__.sum)
def sayHello(self):
print(‘Hello!‘)
@classmethod
def plus(cls):
cls.sum+=1
print(‘现在有%d个人.‘%cls.sum)
people1=People(‘man‘)
People.plus()
people2=People(‘woman‘)
People.plus()
输出结果:
定义类方法,就需要在类的方法上面加上@classmethod,这是一个装饰器,以后会学到,默认值最好使用cls,用其他的也不会报错,调用类方法用类名.类方法名
6.静态方法
静态方法基本上与类方法相似,能用静态方法的基本也能用类方法代替,尽可能少的使用静态方法
class People():
sum=0
def __init__(self,sex):
self.sex=sex
self.__class__.sum+=1
@staticmethod
def sta():
People.sum+=1
print(‘现在有%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.py
class People():
def __init__(self,name,age):
self.name=name
self.age=age
def sayHello(self):
print(‘Hello!‘)
import cls
class Student(cls.People):
pass
stu=Student(‘Tom‘,18)
stu.sayHello()
输出结果:
Student类继承了People类的方法
import cls
class Student(cls.People):
def __init__(self,name,age,score):
self.score=score
cls.People.__init__(self,name,age)
def sayHello(self):
print(‘Hi!‘)
stu=Student(‘Tom‘,18,90)
stu.sayHello()
输出结果:
子类扩展了父类的__init__()方法,但是调用父类的__init__方法时,必须要传入self
然后子类又重写了父类的sayHello()方法
调用父类的方法时也可以使用super()
import cls
class Student(cls.People):
def __init__(self,name,age,score):
self.score=score
super(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):
pass
c=C()
输出结果:
如果父类有相同的方法,子类会优先调用先被继承的类的方法
10.多态
class C():
def say(self):
pass
class B(C):
def say(self):
print(‘B‘)
class A(C):
def say(self):
print(‘A‘)
b=B()
a=A()
b.say()
a.say()
输出结果:
以上是关于Python3 面向对象的主要内容,如果未能解决你的问题,请参考以下文章