Python基础学习简记–类与对象(Day13)
python是一种面向对象的语言,我们来学习python的类与对象。
类提供了一种组合数据和功能的方法。类与对象的关系就可以说是整体和个体的关系。个体具有整体的一般性,个体又有自己独有的特殊性。
1、类的定义
使用Class关键字来新定义一个类,类名一般约定用大写字母开头,函数则用小写字母开头,以做区分
class ClassName:
<statement-1>
.
.
.
<statement-N>
2、类对象
类对象支持两种操作:属性引用和实例化
class NumberA:
"""An example class"""
a = 222
def sum(self):
return 'hello world'
print(NumberA.a) #类对象的属性引用,返回一个数字
print(NumberA.f) #类对象的属性引用,返回一个函数
#222
#<function NumberA.f at 0x0000019DFE6532F0>
n = NumberA() #类对象的实例化
print(n)
#<__main__.NumberA object at 0x00000151B0938A20>
3、类的实例化与构造函数__init__()
实例一般有不一样的初始化参数,我们使用构造函数__init__()来实现。
class Person(object):
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
xiaoming = Person('xiaoming', 18, 165)
xiaozhang = Person('xiaozhang', 20, 172)
print(xiaoming.__dict__)
print(xiaozhang.__dict__)
#{'name': 'xiaoming', 'age': 18, 'height': 165}
#{'name': 'xiaozhang', 'age': 20, 'height': 172}
4、类属性、实例属性
类属性:类内定义的属性为类属性,该类的所有实例都能共享类属性。
实例属性:实例内定义的属性为实例属性,一般有__init__()函数初始化而来,实例属性只在该实例内部使用。
class Score():
math = "95,类属性"
english = "80,类属性"
a = Score()
a.math = "90,实例属性"
print(a.math)
print(Score.math)
print(a.english)
print(a.__dict__)
#90,实例属性
#95,类属性
#80,类属性
#{'math': '90,实例属性'}
"""
对a.math的赋值并不能直接修改类Score中的math属性,这个语句的作用其实是在实例a中
定义了一个新的实例属性math,调用它的方式为 实例名.属性名,也就是a.math
类中属性的调用方式为 实例名.属性名,也就是Score.math
实例中其实是没有a.english属性的,而我们调用a.english却得到了结果,这其实是因为当实例中没有a.english时,它会
自动去实例的类中查找是否有该属性,如果有,则返回类属性的值,如果没有才会报错,正如我们得到的结果‘80,类属性’,
对__dict__的打印也证明了实例中只有math属性。当然通常情况我们更实际的是用3中的构造函数来初始化实例属性。
"""
5、类方法、实例方法、静态方法
class Myclass:
# 实例方法
def instancemethod(self):
pass
# 静态方法
@staticmethod
def staticmethod():
pass
# 类方法
@classmethod
def classmethod(cls):
pass
实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
实例方法,第一个参数必须要默认传实例对象,一般习惯用self。
静态方法,参数没有要求。
类方法,第一个参数必须要默认传类,一般习惯用cls。
6、继承
python的继承构造新类的方式。
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
self.weight = 'weight'
class Chinese(Person):
def __init__(self, name, age, language): # 先继承,再重构
Person.__init__(self, name, age) # 调用父类的构造方法
#super(Chinese,self).__init__(name,age)
#或者使用super().__init__()
self.language = language # 定义类的本身属性
Python 虽然支持多继承的形式,但我们一般不使用多继承,因为容易引起混乱。
7、私有
在 Python 中定义私有变量的方式为在变量名或函数名前加上“__”两个下划线。
class MyClass:
__value = 222 # 私有变量
name = "min" # 公开变量
def __f(self): #私有函数
pass
8、参考文献
类与对象的内容很细致也很多,我们只是简单介绍一下基本知识,了解更多请查看参考文献。
https://docs.python.org/zh-cn/3/tutorial/classes.html
https://blog.csdn.net/LSGO_MYP/article/details/102292580
https://www.bilibili.com/video/av4050443