Python クラスの作成と関係
1. クラスの定義と作成
クラスを作成するには、キーワード「class」を使用します。
例: 次のように myname という名前のクラスを作成します。
class myname:
x =100
print(myname)
説明: クラス名は myname で、x はその属性名です。
1. 私有財産
クラスの一部のプロパティはオブジェクトから呼び出すことができず、クラス内でのみ使用できます。
例:
class jifen:
_count=0
_name=''
def __init__(self,name,count):
self._count += count
self._name =name
def seek (self):
print(self._name+'积分'+str(self._count))
m=jifen('小王',300)
m.seek()
出力:
小王积分300
説明: count は数値であるため、出力するときに文字列を + で接続するため、str 関数を使用して文字列に変換します。
2.プライベートメソッド
プライベート メソッドとプライベート プロパティにも同じことが当てはまり、記憶と理解に例えることができます。
class jifen:
def _jisuan(self,count):
print('更改积分为:'+str(count))
m=jifen
m._jisaun(200)
出力:
Traceback (most recent call last):
File "C:\Users\86139\学习\main.py", line 420, in <module>
m._jisaun(200)
AttributeError: type object 'jifen' has no attribute '_jisaun'
説明: 関数 jisuan はプライベートメソッドであり、呼び出しによりエラーが報告されます。
2. オブジェクトの作成
その後、上記のコードは改善を続け、 myname のクラスを使用してオブジェクトを作成します。
例:
print("Flase")
class myname:
x = 100
user = myname()
print(myname.x)
出力:
100
説明: このクラスにユーザーオブジェクトを作成し、x の値を出力します。
3、init()関数
定義: すべてのクラスには init という名前の関数があり、クラスが初期化されるときに実行されます。init 関数を使用してオブジェクトのプロパティに値を代入する
、またはオブジェクトの作成中に他の操作を実行します。
例:
class myname:
def __init__(self,name,age):
self.name= name
self.age= age
user = myname("小王",20)
print(user.name)
print(user.age)
出力:
小王
20
説明: init 関数を使用して、名前と年齢に値を割り当てます。
4. オブジェクトメソッド
個人的な理解: init 関数はプロパティの初期化と割り当てを担当し、オブジェクト メソッドは別の関数呼び出しを定義します。
属性の実行出力。
例:
class myname:
def __init__(self,name,age):
self.name= name
self.age= age
def my(self):
print("我的名字:"+self.name,"年龄:"+self.age)
user = myname("小王","二十")
user.my()
出力:
我的名字:小王 年龄:二十
説明: init 関数を通じてオブジェクトのプロパティを割り当て、my 関数を通じて出力を呼び出します。
5. pass ステートメント
前のループの pass ステートメントの原理は同じであり、覚えて理解するために比較できます。
class myname:
pass
説明: 何らかの検索でコンテンツのないクラスが必要な場合、クラスの定義を空にすることはできません。エラー報告を避けるために pass ステートメントを置く必要があります。
5. オブジェクトのプロパティの変更
1.交換する
置換: 文字通り、属性の割り当てを変更します。
class myname:
def __init__(self,name,age):
self.name= name
self.age= age
def my(self):
print("我的名字:"+self.name,"年龄:"+self.age)
user = myname("小王","二十")
user.age = 22
print(user.age)
出力:
22
説明: 年齢属性の割り当てを 20 から 22 に変更します。
2.削除
削除: 同様に、クラスから属性を直接削除します。
例:
class myname:
def __init__(self,name,age):
self.name= name
self.age= age
del user.age
def my(self):
print("我的名字:"+self.name,"年龄:"+self.age)
user = myname("小王","二十")
del user.age
print(user.age)
出力: エラーが報告されます
説明: age は削除されており、この属性がありません。
六、クラス間の関係
1. 継承
(1) 単一継承
継承されたクラスは基本クラス、親クラス、スーパークラスと呼ばれ、継承者はサブクラスと呼ばれ、サブクラスは親クラスのプロパティとメソッドを継承できます。
クラス継承の構文:
class 类名 (被继承父类的名字)
.......
例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
pass
x = sun("小王", "憨憨")
x.printname()
出力:
小王 憨憨
論理的説明: 上記のコードでは、親クラス Father とサブクラス sun が定義されていますが、sun クラスの内容は空です。パス: class sun(father): 親クラスの属性メソッドを継承します。
(2) 多重継承
サブクラスは同時に 2 つ以上の親クラスを継承できます。この状況は多重継承と呼ばれます。
例:
class animals:
color =''
weight=0
def jump(self):
print('我能跳')
class cats:
def maomi(self):
print('喵喵')
class mycat (animals,cats):
def catch(self):
print('我才能抓到老鼠')
c=mycat()
c.jump()
c.maomi()
c.catch()
出力:
我能跳
喵喵
我才能抓到老鼠
2. 継承にinit関数を追加
次に、上記のコードを変更します。
正しい例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname):
father.__init__(self, fname, lname)
x = sun("小王", "憨憨")
x.printname()
出力:
小王 憨憨
エラーの例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname):
x = sun("小王", "憨憨")
x.printname()
出力:
File "C:\Users\86139\学习\main.py", line 388
x = sun("小王", "憨憨")
IndentationError: expected an indented block
説明: エラーの理由は、サブクラスが親クラスの init を呼び出していないため、親クラスの継承を維持するために init 関数を呼び出す必要があることです。
3.スーパーファンクション
スーパー関数の役割: サブクラスが親クラスのすべてのプロパティとメソッドを継承できるようにします。
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname):
super().__init__( fname, lname)
x = sun("小王", "憨憨")
x.printname()
出力:
小王 憨憨
4. 属性を追加する
機能: サブクラスに属性を追加します。
上記のコードを簡単に変更するだけで理解しやすくなります。
例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname):
super().__init__( fname, lname)
self.xinxi =22
x = sun("小王", "憨憨")
x.printname()
print(x.xinxi)
出力:
小王 憨憨
22
理解
5. メソッドの追加
役割: サブクラスにメソッドを追加します。
上記のコードを簡単に変更するだけで理解しやすくなります。
例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname,xinxi):
super().__init__( fname, lname)
self.xinxi =22
def san(self):
print("姓名",self.firstname,"性别",self.lastname,"年龄", self.xinxi)
x = sun("小王", "憨憨","22")
x.san()
出力:
姓名 小王 性别 憨憨 年龄 22