day 16対象に向ける2

5509 ワード

1.アクセス権限のプライベート:クラスの外部では使用できません.保護を引き継ぐこともできません.クラスの外部では使用できません.公開を引き継ぐことができます.クラスの外部では使用できます.また、2.Pythonの属性と方法を引き継ぐアクセス権限は公開のみですが、別のプライベート化を提供しています.3.Pythonでは属性または方法名の前に加えて、属性を下げることができます.または方法を私有化します.二つの下線の先頭しかないです.私有の属性と方法はクラスの内部でしか使えません.クラスの外では4.Pythoon私有化の原理を使って名前の前にある属性と方法は家にあります.クラス名'属性と方法を保存します.
class Person:
    num =31
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def eat(self,food):
        print('%s %s'%(self.name,food))

    @classmethod
    def show_num(cls):
        print('     :%d'%cls.num)
    @staticmethod
    def func1():
        print('wqwqwqqwqwqwqwqwqwqwqw')
def main():
    p1 = Person('   ',18)

1.アプリケーションシーンgetter:対象属性の値を取得する前に他のことをしたいなら、この属性にgetter setterを追加します.対象属性に値を付ける前に他のことをしたいなら、この属性にsetterを追加します.
2.ゲッター第一歩:属性を宣言する時は属性名の前に_を追加する.ステップ2:関数を宣言します.(関数にはself以外のパラメータがありません.戻り値があります.戻り値は属性が取得した値です.)@property defで削除された属性名(self):他のことをして属性の値を返します.第三ステップ:クラスの外部にオブジェクトを通して、削除された属性に関連する属性を取得します.第二ステップ:宣言関数(関数はself以外にもう一つのパラメータが必要です.戻り値はありません.ここのパラメータは属性賦の値を表します.@属性名は削除します.setter defで削除された属性名(self、パラメータ):属性には他のことをして第三ステップを与えます.クラスの外部にオブジェクトを通して削除した属性は関連属性に値を付けます.注意:持たない属性を通じて属性に値を付けます.実質的にはsetter対応の関数を呼び出します._を持たないことによって.の水性を利用して属性の値を取得します.実質的にgetterに対応する関数を呼び出します.
class Person:
    def __init__(self, name=''):
        self.name = name
        self._age = 0
        self._week = 1

    #   getter
    @property
    def week(self):
        if self._week < 7:
            return '  %d' % self._week
        elif self._week:
            return '   '

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if not isinstance(value, int):
            raise ValueError
        if not (0 <= value <= 150):
            raise  ValueError
        self._age = value
def main():
    p1 = Person
    p1.age = 233
    print(p1.age)

1.1つのクラスは他のクラスを継承し、そのうち相続者と被相続者が発生する.ここの後継者の名前は親類または超類継承ということです.子類を直接父類とする方法と属性2.どのようにa.文法を継承しますか?class類名(父類):類の内容説明:a.Pythonのすべての種類は直接または間接的にobject(基種)b.Pythonから継承されています.父類リストは複数の種類があります.複数のクラスの間にコンマで区切られています.*注意:a.slaotsの値を引き継いで効果がありません.b.クラスの中でslaotsを与えます.割り当て後、現在のクラスのオブジェクトはdictを使用できません.しかし、このクラスのサブオブジェクトはdictを使用してもいいです.dictは親から継承されていない属性で、サブクラスに追加されたオブジェクト属性cだけです.親類がslaotsに値を与えていない場合、直接サブクラスのslaotsに与えます.無効多相続の場合、複数の親類のうちのすべての方法は継承できます.ただし、対象属性は最初の父親類の継承のみとなります.
class Person(object):
    num =52
    def __init__(self,name='',age=0,sex=' '):
        self.name = name
        self.age = age
        self.sex=sex

    def eat(self,food):
        print('%s  %s'%(self.name,food))

    @classmethod
    def show_num(cls):
        print(cls.num)

class Student(Person):
    pass

def main():

    s1 =Student
    print(s1.__dict__)
=======================添加方法=============================================1.添加方法は直接サブカテゴリに新しい方法を宣言します.しかし、親はサブクラスに追加する方法を使用できません.2.書き換え方法は、サブクラスにおいて親タイプの方法を再実現します.完全書き換えは親タイプの機能を保留し、サブクラスに新しい機能を追加します.部分書き換え(サブクラスの方法ではsuper().という方法で親タイプの方法を呼び出します.
3.クラスの関数の呼び出しプロセスは関数宣言の位置に戻ります.現在のクラスに方法があるかどうかは先に確認してください.もしあるなら、直接に現在のクラスのメソッドを呼び出します.あるなら、呼び出します.ないなら、親の種類の中にあるかどうかを確認します.親の種類にもないなら、親の種類を見てください.======1.クラスのフィールドは直接サブクラスで新しいフィールドを宣言します.
class Person(object):
    num =52
    def __init__(self,name='',age=0,sex=' '):
        self.name = name
        self.age = age
        self.sex=sex

    def eat(self,food):
        print('%s  %s'%(self.name,food))

    @classmethod
    def show_num(cls):
        print(cls.num)

class Student(Person):
    def study(self):
        print('%s    '%self.name)

    def eat(self):
        super


    @classmethod
    def show_num(cls):    #    
        print('xuesheng%s'%cls.num)


def main():
    s1 = Student('   ')
    s1.study()
オブジェクトの属性を追加します.オブジェクトの属性は、実はinitを継承することによって継承されます.

class Animal:
    def __init__(self):
        self.age = 0
        self.color = '  '


class Dog():
    def __init__(self, name):
        #      init            
        super().__init__()
        self.name = name


def main():
    pass

1.演算子のリロードは、クラス内の対応する魔法方法を実現することにより、現在のクラスのオブジェクトに対応する演算子をサポートします.
class Student():
    def __init__(self,name,age,score):
        self.name = name
        self.age = age
        self.score = score
対応する魔法の方法を実現し、二人の生徒を+操作できるようにする.
    def __add__(self, other):
        return self.age + other.age
def main():
   stu1 =Student('  ',18,97)
   stu2 = Student('  ',19,87)
   print(stu1+stu2) #print(stu1.__add__(stu2))
if __name__ == '__main__':
    main()
メモリ管理1.データのメモリはスタック区間とヒープ区間に分けられています.下からスタック区間のメモリ開発とリリースはシステムが自動的に管理しています.ヒープ区間はプログラマがコード開発とリリースを通じてPython言語の角度から、ヒープ区間のメモリ開発と解放はシステムが自動的に管理しています.ヒープ区間のメモリキーもすでにパッケージされています.
a.Pythonでは変数自体がスタック区間に存在し、関数呼び出しプロセスはスタック区間にあり、対象はすべてスタック区間に存在します.(Pythonではすべてのデータは対象です.)b.Pythonにおける変数の割り当てプロセス:現在、ヒープ区間の開発空間でデータを保存し、データに対応するアドレスをスタック区間の変数に保存するのは数字と文字列が特殊です.賦する時は直接に空間を開拓することはなく、以前にこのデータが保存されていたかどうかを検査します.もしあるなら、この住所を使ってください.
2.メモリリリース(ゴミ回収メカニズム)原理:Pythonの各オブジェクトには参照カウントという属性があり、現在のオブジェクトの参照個数を示しています.一つのオブジェクトが廃棄されているかどうかを判断すると、対象の参照カウントが0であるかどうかを確認し、0でない場合はgetrefcount関数(オブジェクト)を廃棄しません.取得対象の参照カウントです.
from sys import  getrefcount#

def main():
    list1 = [1,2]
    #                   
    list2 = list1
    print(getrefcount(list1))
    pass