クラスとインスタンス
Python はオブジェクト指向言語であり、オブジェクト指向の最も重要な概念はクラスとインスタンスです。私は初めて学習したとき、これらの概念を理解するまでよく理解できなかったのを覚えています。先生は「羽の鳥は群れます」と言いました。 間違いはクラスです
羽の鳥は群れます
クラスは、実際には、同じ特徴を持ついくつかのものを 1 つのカテゴリに分類しています
class Person(object): pass
人のクラスを定義しましたが、人には次のようないくつかの特徴があります。目、口、これらを追加しましょう
class Person(object): eyes = 2 mouth = 1
その人についての情報はすでにいくつか書きましたが、でも、その人の名前はまだ残っています、例えば私、ミンクです、私は自分を悪く扱うことはできません、私はこれらを追加する必要があります
class Person(object): eyes = 2 mouth = 1 name = mink
それはとても完璧です、一人の人がついにそれを完成させました。 1 分しかかかりませんでした (冗談です)。人間には目が 2 つ、口が 1 つあります。私の名前はミンクです。なぜ人間はミンクと呼ばれるのですか?ミンクは人間の名前です。人間をミンクと呼ぶのは明らかに間違っています。例
class Person(object): eyes = 2 mouth = 1 def __init__(self, name): self.name = name me = Person('mink')
class Person(object): eyes = 2 mouth = 1 def __init__(self, name) self.name = name def jineng(self, txt): print "%s %s" % (self.name, txt) me = Person('mink') me.jineng("我不受重力影响, 我会飞")
クラスメソッドと静的メソッド
でよく見かける@classmethodと@staticmethod Python では、クラス メソッドとインスタンス メソッドと呼ばれます。
class Animal(object): name = 'lili' age = 1 cat = Animal() print cat.name, cat.age # print 'lili' 1
属性にアクセスします
# 显示内容是一样的 print cat.name, cat.age print Animal.name, Animal.age 给Animal类添加一个方法(函数) class Animal(object): name = 'lili' age = 1 def edit(self, name, age): self.name = name self.age = age cat = Animal() cat.edit('rol', 2) print cat.name, cat.age # print 'rol' 2 print Animal.name, Animal.age # print 'lili' 1
# 我们修改一下这个函数 def edit(self, name, age): name = name self.age = age cat = Animal() cat.edit('rol', 2) print cat.name, cat.age # pirnt 'rol' 2 print Animal.name, cat.age # print 'lili' 1
# 再一次修改edit @classmethod def edit(cls, name, age): cls.name = name cls.age = age cat = Animal() cat.edit('rol', 2) print cat.name, cat.age # print 'rol' 2 print Animal.name, Animal.age # print 'rol' 2
次に、これを与えます クラスは属性を初期化するためのinitメソッドを追加します
class Animal(object): name = 'lili' age = 1 def __init__(self, name, age): self.name = name self.age = age ... cat = Animal('kuku', 4) cat.edit('rol', 2) print cat.name, cat.age # print 'kuku' 4 print Animal.name, Animal.age # print 'rol' 2
# 添加staticmethod @staticmethod def say_name(name=None): if not name: name = self.name print 'my name is %s.' % name cat = Animal('kaka', 3) cat.say_name() # 运行的话会报 NameError: global name 'self' is not defined # 那是不是没给他添加self字段, 所以没找到 def say_name(self, name=None): ... cat.say_name() # TypeError: say_name() takes at least 1 argument(0 given), 显示缺少参数
# 我们修改一下代码 # 先创建一个实例的方法, 他使用类的staticmethod @staticmethod def say_name(name): print 'my name is %s.' % name def say(self): self.say_name(self.name) @classmethod def _say(cls): cls.say_name(cls.name) cat = Animal('kaka', 3) cat.say() cat._say()
要約すると:
静的メソッド (staticmethod)