ホームページ  >  記事  >  バックエンド開発  >  クラスと属性の概要

クラスと属性の概要

巴扎黑
巴扎黑オリジナル
2017-07-21 14:14:241364ブラウズ

1. 概要

1. クラス (class Dog(object)) を定義する --> インスタンス化 (d = Dog())

2.

3. self.name = name クラスの属性、メンバー変数

4. def Say_hi()クラスのメソッド、動的属性

2. クラスの属性とメソッドにアクセスする

インスタンス オブジェクト .

属性/メソッドを使用して

class Role(object):
    def __init__(self, name, role, weapon, life_value=100, money=15000):
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.money = money

    def shot(self):
        print("%s is shooting..." % self.name)

    def got_shot(self):
        print("ah...,%s got shot..." % self.name)

    def buy_gun(self, gun_name):
        print("%s just bought %s" % (self.name,gun_name))


r1 = Role('Alex', 'police', 'AK47')  # 生成一个角色
r2 = Role('Jack', 'terrorist', 'B22')   # 生成一个角色

2.1 オブジェクトの属性を変更します

上の例では、キャラクター r2 の武器を変更しました。 B22 --> B13。しかし実際には、キャラクターの武器属性を r2 と呼ぶと、彼の武器が変更されていないことがわかります:

r1.shot()    #  调用shot 方法
r2.buy_gun('B13')  # 调用 buy_gun的方法并传参
print(r1.role)   # 打印类的属性

# 输出

Alex is shooting...
Jack just bought B13
police

実際、武器を購入するときにオブジェクトの属性を直接変更できます:

r2.buy_gun('B13')
print(r2.weapon)

# 输出
Jack just bought B13
B22       # 可以发现武器依然是 B22

3. プライベート属性

3.1. プライベート属性を定義する

クラスの属性をプライベート属性として定義すると、外部から呼び出したり、自由に変更したりすることはできません。プライベート プロパティはクラス内でのみ使用できます。

def buy_gun(self, gun_name):
      print("%s just bought %s" % (self.name, gun_name))
      self.weapon = gun_name    # 在方法内改变属性



r2.buy_gun('B13')
print(r2.weapon)

#输出
Jack just bought B13
B13    # 可以发现武器已经改变

操作の結果、属性nameへのアクセスは問題ありませんが、プライベート属性self.__addressに直接アクセスするとエラーが報告されます。ただし、他の方法を使用してもアクセスできます。

3.2. getメソッドはプライベートプロパティにアクセスします

プライベートプロパティには外部から直接アクセスすることはできませんが、クラス内からはアクセスできるので、プライベートプロパティを取得するメソッドを定義できます。

class Person(object):

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.__address = address   # 定义一个私有属性

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')
print(p1.name)
print(p1.__address)   # 访问私有属性

# 输出

Bigberg
  File "G:/python/untitled/study6/类的私有属性.py", line 17, in <module>
    print(p1.__address)
AttributeError: &#39;Person&#39; object has no attribute &#39;__address&#39;

3.3 プライベート プロパティへの強制アクセス

メソッドを使用してプライベート プロパティへのアクセスを強制したり、プライベート プロパティの値を変更したりすることもできます。メソッド: オブジェクト名._クラス名__属性名。

class Person(object):

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.__address = address

    def get_private(self):
        return self.__address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person(&#39;Bigberg&#39;, &#39;Doctor&#39;, &#39;8833421&#39;, &#39;hz&#39;)
res = p1.get_private()
print(res)

# 输出
hz

クラスは、アプリケーションを簡素化し、最適化するための重要なツールです。

1. 継承: サブクラスが親クラスの特性を継承する機能。これは、オブジェクト指向プログラミング手法の共有を具体化して拡張し、同じタイプのオブジェクトがデータとプログラム コードを共有できるようにして、プログラムの再利用性を向上させます。親クラスは、さらに定義して新しいクラスを派生できるクラスであり、サブクラスは、他のクラスを出発点として使用し、より具体的な特性を定義することによって確立される新しいクラスです。 2. ポリモーフィズム: 一部の関連クラスには同じ名前のメソッドが含まれていますが、メソッドの内容は異なる場合があります。どちらを呼び出すかは、オブジェクトのクラスに基づいて実行時に決定され、同じメッセージが異なるオブジェクトによって受信されると、異なるアクションが発生する可能性があります。 3. 抽象化: クラスまたはオブジェクトに関する他の情報を処理せずに、クラスまたはオブジェクトの特徴を抽出します。
4. 概要

1. プライベート属性を定義します: self.__private_attr_name = private_attr_name

2. プライベート属性への必須アクセス: オブジェクト名._クラス名__属性名 (d._dog__sex)

3.外部読み取り専用インターフェイスアクセスを提供します:

def get_sex(self):

return self.__sex

以上がクラスと属性の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。