Python でクラスとメソッドを使用する方法

PHPz
リリース: 2023-04-21 14:28:16
転載
1959 人が閲覧しました

クラスとメソッドの概念と例

  • クラス (クラス): 同じプロパティとメソッドを持つオブジェクトのコレクションを記述するために使用されます。コレクション内のすべてのオブジェクトに共通のプロパティとメソッドを定義します。オブジェクトはクラスのインスタンスです。

  • メソッド: クラスで定義された関数。

  • クラス __init__() のコンストラクター メソッド: クラスには init() という名前の特別なメソッド (コンストラクター) があり、クラスがインスタンス化されるときに使用されます。自動的に呼び出されます。

  • インスタンス変数: クラスの宣言では、属性は変数で表されます。このタイプの変数はインスタンス変数と呼ばれます。インスタンス変数は変数です。自己変更変数を使用します。

  • Instantiation: クラスのインスタンス、つまりクラスの特定のオブジェクトを作成します。

  • 継承: つまり、派生クラスは基本クラスのフィールドとメソッドを継承します。継承により、派生クラスのオブジェクトを基本クラス オブジェクトとして扱うこともできます。たとえば、次のような設計があります。Dog タイプのオブジェクトは、「is-a」関係 (たとえば、Dog is an Animal) をシミュレートする Animal クラスから派生します。

1. Python クラス: class

Python のクラス (class) は複数の関数から構成されるファミリーに相当します この大きなファミリーの中に Myclass という名前の人がいるとしますf、この f に天気を印刷する機能がある場合、ある日、今日の天気を印刷するためにこの f が必要になった場合、彼が私にそれを印刷する前に、つまり彼のフルネームを MyClass.f と呼ばなければなりません。時間が経てば、彼の家族の名前が彼の名前になる必要があります。

  • 属性: 属性は、このクラスの変数です。変数が項目の場合、この大きなファミリーでは、さまざまな属性がさまざまな項目になります。

  • メソッド: メソッドは、このクラスの関数です。機能が人だとすれば、この大家族の中で、さまざまなメソッドはさまざまな人々になります。

MyClass インスタンス:

#Myclass家族,但是这个家族只有一个人f
class MyClass:   
  """一个简单的类实例"""    
  i = 12345    
  def f(self):        
    return 'hello world'
# 实例化类
x = MyClass() 
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i) #家族x + 物品名i
print("MyClass 类的方法 f 输出为:", x.f()) #家族x + 人名f
ログイン後にコピー

出力結果:

Python でクラスとメソッドを使用する方法

2. クラスの構築方法__init__()

init() も人間ですが、外部の人々が必要なときに家族と外部の世界との間の連絡役である場合自分の家族の人々に電話をかけるには、最初にその人に伝える必要があります。そのため、家族が呼び出される限り、最初に init() が実行され、その後、呼び出された人に、呼び出されたものを実行するように指示されます。

init() 例:

class Complex:
    def __init__(self, realpart, imagpart): #必须要有一个self参数,
        self.r = realpart
        self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i)   # 输出结果:3.0 -4.5
ログイン後にコピー

出力結果:

Python でクラスとメソッドを使用する方法

##3. パラメータクラス内のメソッドの数

self

クラス内で、def キーワードを使用してメソッドを定義します。一般的な関数定義とは異なり、クラス メソッドにはパラメーター self が含まれている必要があり、これは最初のパラメーターです。 one. パラメータ、self はクラスのインスタンスを表します。

  • self: クラス メソッドと通常の関数の間に特別な違いが 1 つだけあります - 最初のパラメーター名を追加する必要があります。慣例により、その名前は self です。

  • クラスのインスタンス: インスタンスのシナリオでクラスを適用します。たとえば、クラス f に関数があります。この f に print がある場合、特定の時刻に天気条件の能力がある場合、今日の 12 時の天気を印刷するためにこれが必要な場合、今日の 12 時の天気を印刷させるアクションはクラスのインスタンス化です。クラス real. アクションの関数の機能。

#インスタンス化されたインスタンス

:

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    #定义构造方法
    def __init__(self,n,a):
        self.name = n
        self.age = a
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))

# 实例化类
p = people('Python',10,30)
p.speak()
ログイン後にコピー

出力結果:

Python でクラスとメソッドを使用する方法4. 相続

# 2つの家があり、一方の家族Aが衰退し始め、新興の別の家族Bが家族Aの資材と使用人を継承したい場合、次の方法で実現できます。 , ここでは、家族Aが親クラス、家族Bが子クラスとします。使い方としては、家族Bが家族Aのアイテムや従者を自由に使えるようにすれば。

class [子类]([父类]):
ログイン後にコピー

  • BaseClassName

    (例の基本クラス名) は、派生クラスと同じスコープで定義する必要があります。クラスに加えて、式も使用できます。これは、基本クラスが別のモジュールで定義されている場合に便利です。

  • Python は
  • 多重継承

    もサポートしています。つまり、複数の親クラスを継承できます。継承方法は単一継承方法と同様で、次のとおりです。 #

    class [子类]([父类]1, [父类]2, [父类]3):
    ログイン後にコピー

    #継承例:
#
#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))

#单继承示例
class student(people): #student为子类,people为父类
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))

s = student('ken',10,60,3)
s.speak()
ログイン後にコピー

実行結果:

5.方法重写

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法。即如果B家族继承了A家族,但是B家族有个佣人只会扫地,于是A家族给这个人洗脑,让他啥都不会,然后再教这个佣人洗碗、擦桌子的技能,那么这个佣人就只会洗碗和擦桌子了。

  • super()函数是用于调用父类(超类)的一个方法。

方法重写实例:

class Parent:        # 定义父类
   def myMethod(self):
      print('调用父类方法')

class Child(Parent): # 定义子类
   def myMethod(self):
      print('调用子类方法')

c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法
ログイン後にコピー

输出结果:

Python でクラスとメソッドを使用する方法

类的特殊属性与方法

类的私有属性

  • _private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

私有属性实例:

class JustCounter:
    __secretCount = 0  # 私有变量
    publicCount = 0    # 公开变量

    def count(self):
        self.__secretCount += 1
        self.publicCount += 1
        print(self.__secretCount)

counter = JustCounter()
counter.count()
counter.count()
print(counter.publicCount)
print(counter.__secretCount)  # 报错,实例不能访问私有变量
ログイン後にコピー

输出结果:

Python でクラスとメソッドを使用する方法

类的私有方法

  • __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods。

私有方法实例:

class Site:
    def __init__(self, name, url):
        self.name = name       # public
        self.__url = url   # private

    def who(self):
        print('name  : ', self.name)
        print('url : ', self.__url)

    def __foo(self):          # 私有方法
        print('这是私有方法')

    def foo(self):            # 公共方法
        print('这是公共方法')
        self.__foo()

x = Site('Python', 'www.irvingao.com')
x.who()        # 正常输出
x.foo()        # 正常输出
x.__foo()      # 报错
ログイン後にコピー

输出结果:

Python でクラスとメソッドを使用する方法

以上がPython でクラスとメソッドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート