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 面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Python3快速入门——Python3面向对象

Python3快速入门Python3面向对象

Python3-初识别面向对象

Python3-2020-测试开发-20- 面向对象之封装,继承,多态

Python3 面向对象之-----元类

python3 面向对象之封装