2019-08-08_Note_Day14
4709 ワード
オブジェクトベース
一、クラスとオブジェクト
1.定義
クラスは、同じ属性、同じ機能を持つオブジェクトの集合(抽象)です.
オブジェクトはクラスのインスタンス(具体的)です.
2.クラスの宣言
まずこのクラスの共通の属性と機能を確定します
1)構文:
class :
2)説明:
class
:キーワード
:
要件:キーワード仕様ではない識別子:
a.頭文字大文字、アルパカ式命名規範b.見名知意c.システムが提供する関数名またはクラス名を使用できない
:関数の説明ドキュメントと同じ
:主にクラスの属性とメソッド(クラスに宣言された関数)を含むclass Person:
"""
:
-
-
"""
def eat(self, food):
print('eating {}'.format(food))
3.宣言対象
1)構文
= ()
二、クラスの方法
クラス内のメソッドは、オブジェクトメソッド、クラスメソッド、静的メソッドに分けられます.
1.対象メソッド
1)どのように宣言しますか。
直接宣言(宣言前にアクセラレータを必要としない)クラス内の関数がオブジェクトメソッドです.
2)特徴:
selfパラメータを持参する;オブジェクトでオブジェクトメソッドを呼び出すと、selfはパラメータを渡さず、現在のオブジェクトを自動的にselfに渡す.selfは誰が呼び出すかを誰に向けることができる
3)呼び出し方法:
オブジェクトオブジェクトメソッド()'の形式呼び出し(オブジェクトによって呼び出される)class Person:
def eat(self):
print('eating...')
p1 = Person()
p1.eat()
# Person.eat('abc') #
2.構造方法
関数名はクラス名と同じで、クラスのオブジェクトを作成するための関数です.
pythonでクラスを宣言すると、オブジェクトを作成するための構造方法が自動的に作成されます.
構築メソッドの実行手順:
a.メモリにスペースを開いてオブジェクトを作成する
b.作成したオブジェクトでinitメソッドを呼び出す
c.返却先の住所
3.initメソッド
クラス内でオブジェクトを初期化するためのメソッドを宣言します(オブジェクトが作成されると自動的に呼び出されます).
:オブジェクトを作成するときにパラメータを渡す必要はありません.いくつかのパラメータを渡す必要があります.このクラスのinitメソッドによって決定されます.class Dog:
def __init__(self, name='', age=0):
print(' ', name, age)
# 5
dog1 = Dog(' ', 5)
# 10
dog2 = Dog(' ', 10)
# 0
dog3 = Dog()
三、クラスの属性
1.クラスの属性
属性はクラスに宣言された変数です
クラスのプロパティは、フィールド、オブジェクトのプロパティに分けられます.
1)フィールド
a.どのように宣言します:クラスの中で宣言して、関数の外の変数はフィールドです
b.どのように使うか: .
の形で使う
c.使用シナリオ:属性の値はオブジェクトによって異なることはなく、このような属性はクラスのフィールドとして宣言される
2)オブジェクト属性
a.どのように宣言しますか:'self.属性名=値'の形式でinitメソッドに宣言
b.どのように使うか:オブジェクトを通して使う
c.使用情景:属性の値はオブジェクトによって異なる場合があり、このような属性はオブジェクト属性として宣言される
練習:# : Dog , : , ,
# ,
# : , ( 'XXX: ' )
class Dog:
def __init__(self, name, breed, age=1, gender='male'):
self.name = name
self.age = age
self.gender = gender
self.breed = breed
def print_info(self):
print('Dog[name = {}, age = {}, gender = {}, breed = {}'
.format(self.name, self.age, self.gender, self.breed))
def bark(self):
print('{}: !'.format(self.name))
dog1 = Dog('caicai', ' ', gender='female')
dog1.print_info()
dog1.bark()
'''
Dog[name = caicai, age = 1, gender = female, breed =
caicai: !
'''
2.対象属性の添削
pythonのクラスのオブジェクトのオブジェクト属性は削除変更をサポートします
1)チェック(属性の値を取得)
方法1:対象.ツールバーの
方法2:getattr(オブジェクト、属性名:str)/getattr(オブジェクト、属性名:str、デフォルト)
方法3:対象.getattribute(属性名:str)class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
p1 = Person(' ', 18, ' ')
p2 = Person(' ', 20, ' ')
print(p1.name) #
print(getattr(p1, 'name')) #
print(p1.__getattribute__('name')) #
2)増加/変更
方法1:対象.属性=値
メソッド2:setattr(オブジェクト、プロパティ名:str、値)#
p1.name = ' '
print(p1.name) #
setattr(p1, 'age', 38)
print(p1.age) # 38
#
p1.height = '180'
print(p1.height) # 180
setattr(p1, 'face', 60)
print(p1.face) # 60
3)削除
方法1:delオブジェクト.ツールバーの
メソッド2:delattr(オブジェクト、プロパティ名)del p1.name
print(p1.name) # AttributeError: 'Person' object has no attribute 'name'
delattr(p1, 'age')
print(p1.age) # AttributeError: 'Person' object has no attribute 'age'
3.slots魔法
slotsフィールドで値を割り当てて、現在のクラスのオブジェクトにどのオブジェクト属性があるかを制約します.class Dog:
__slots__ = ('name', 'age', 'gender', 'height', 'weight')
def __init__(self, name, age):
self.name = name
self.age = age
dog1 = Dog(' ', 3)
# dog1.namee = ' ' # AttributeError: 'Dog' object has no attribute 'namee'
dog1.gender = 'male'
print(dog1.gender) # male
class :
class Person:
"""
:
-
-
"""
def eat(self, food):
print('eating {}'.format(food))
= ()
class Person:
def eat(self):
print('eating...')
p1 = Person()
p1.eat()
# Person.eat('abc') #
class Dog:
def __init__(self, name='', age=0):
print(' ', name, age)
# 5
dog1 = Dog(' ', 5)
# 10
dog2 = Dog(' ', 10)
# 0
dog3 = Dog()
# : Dog , : , ,
# ,
# : , ( 'XXX: ' )
class Dog:
def __init__(self, name, breed, age=1, gender='male'):
self.name = name
self.age = age
self.gender = gender
self.breed = breed
def print_info(self):
print('Dog[name = {}, age = {}, gender = {}, breed = {}'
.format(self.name, self.age, self.gender, self.breed))
def bark(self):
print('{}: !'.format(self.name))
dog1 = Dog('caicai', ' ', gender='female')
dog1.print_info()
dog1.bark()
'''
Dog[name = caicai, age = 1, gender = female, breed =
caicai: !
'''
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
p1 = Person(' ', 18, ' ')
p2 = Person(' ', 20, ' ')
print(p1.name) #
print(getattr(p1, 'name')) #
print(p1.__getattribute__('name')) #
#
p1.name = ' '
print(p1.name) #
setattr(p1, 'age', 38)
print(p1.age) # 38
#
p1.height = '180'
print(p1.height) # 180
setattr(p1, 'face', 60)
print(p1.face) # 60
del p1.name
print(p1.name) # AttributeError: 'Person' object has no attribute 'name'
delattr(p1, 'age')
print(p1.age) # AttributeError: 'Person' object has no attribute 'age'
class Dog:
__slots__ = ('name', 'age', 'gender', 'height', 'weight')
def __init__(self, name, age):
self.name = name
self.age = age
dog1 = Dog(' ', 3)
# dog1.namee = ' ' # AttributeError: 'Dog' object has no attribute 'namee'
dog1.gender = 'male'
print(dog1.gender) # male