Python第17章:オブジェクト指向の基本

オブジェクト指向の財団

クラス:クラスは、同じ機能とプロパティを持つオブジェクトのコレクションです。(クラスは抽象的です)

オブジェクト:クラスのインスタンスはオブジェクトです(オブジェクトは具体的です)

クラススルーコードを定義して、同じプロパティを持つオブジェクトと機能を明確に記述します

構文:
クラスクラス名:
クラスの説明ドキュメント
クラスの内容(クラス属性とクラスメソッド)

オブジェクトを作成する

構文:
クラス名()

class Circle:
    pi = 4.1315926

    def __init__(self):
        self.r = 0

    def area(self):
        print(Circle.pi*self.r**2)

    def perimeter(self):
        print(2*Circle.pi*self.r)

# 创建两个Student类的对象
s1 = Student()
s2 = Student()
print(s1 is s2)    # False
print(id(s1), id(s2))
print(s1)
print(s2)

===============構築方法と初期化

コンストラクター(関数)とは

名前はクラスと同じで、関数は対応するクラスのオブジェクトを作成する関数です。

pythonがタイプを定義すると、システムはこのクラスに対応する構築メソッドを自動的に作成します

マジックメソッド:クラス内で__で始まり、__で終わる関数は、まとめてマジックメソッドと呼ばれます。このタイプのメソッドは、プログラマーが呼び出す必要はありません。システムは、必要に応じて自動的に呼び出します。

初期化方法:_ init _

クラスを介してオブジェクトを作成すると、システムはこのクラスの__init__メソッドを自動的に呼び出します。

__init__メソッドをクラスに追加する場合、メソッド名とデフォルトのパラメーターselfが変更されない限り、プログラマーは状況に応じてパラメーターと関数本体を自由に追加できます。

コンストラクターを呼び出してオブジェクトを作成する場合、パラメーターは必要ありません。いくつかのパラメーターが必要です。対応するクラスの__init__メソッドにself以外の追加の正式なパラメーターがあるかどうかを確認してください。いくつかあります。

==========クラス属性

クラスの属性は、クラス属性(クラスのフィールド)とオブジェクト属性に分けられます。

クラス属性

定義:クラス内の関数の外部の変数を直接定義します。
機能:オブジェクトが異なるため、違いはありません。
使用方法:クラス名。クラス属性

オブジェクト属性

定義:__ init__関数では、「self.attribute name = value」の形式で定義され
ます機能:
オブジェクトが異なるため、異なります。使用方法:オブジェクト。

class Person:
    a = 10

    def __init__(self):
        self.name = '张三'
        self.age = 18
        self.gender = '男'
class Dog:
    def __init__(self, name, color, gender='母狗', breed='土狗'):
        self.name = name   # 每次创建狗的对象的时候必须给name属性传参
        self.gender = gender  # 每次创建狗的对象的时候可以不给gender赋值,也可以给gender赋值。如果不赋值默认值是'母狗'
        self.age = 1      # 每次创建狗的对象的时候age的值只能是1
        self.color = color
        self.breed = breed

    # __repr__魔法方法:打印当前类的对象的时候,系统会自动调用这个方法,并且把这个方法的返回值作为打印结果(返回值必须是字符串)
    def __repr__(self):
        # self: 打印谁self就指向谁
        # return str(self.__dict__)
        return f'<{str(self.__dict__)[1:-1]}>'

d1 = Dog('大黄', '黄色')
print(d1.name, d1.color, d1.gender, d1.age, d1.breed)

d2 = Dog('小白', '白色', breed='哈士奇')
print(d2)

======================クラスメソッド

クラスで定義されている関数はメソッドです。クラス内のメソッドは、オブジェクトメソッド、クラスメソッド、静的メソッドに分けられます。

オブジェクトメソッド

定義方法:クラスで直接定義されている関数はオブジェクトメソッドです(関数を定義する前にデコレータは追加されません)
機能:自己パラメータself;呼び出し時にパラメータselfを渡す必要はなく、システムは現在のオブジェクトを自動的にselfに渡します(who自己を呼ぶ人)

list
list1 = [100,20]
list1.append(42)
print(list1)    [100,20,40]
此处append后有两个参数,其中一个就是self,不给值,list1.了这个对象,self就指向list1

呼び出し方法:オブジェクトの形式で呼び出します。メソッド名()
使用する場合:関数の機能を実装するためにオブジェクトのプロパティが必要な場合

练习:定义一个点类(二维),有属性: x坐标、y坐标  方法:计算当前点到指定点的距离
class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def distance(self,self2):
        return ((self.x-self2.x)**2+(self.y-self2.y)**2)**0.5


p1 = Point(10,20)
p2 = Point(20,30)
result = p1.distance(p2)
print(result)

おすすめ

転載: blog.csdn.net/SaharaLater/article/details/111935437