Python基础学习简记--类与对象(Day13)

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
#
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

你可能感兴趣的:(python)