Pythonの研究ノート(36-40)クラスとオブジェクト

トピックス学習:クラスとオブジェクト
日付を学ぶ:2020年2月9日
Pythonのバージョン:3.7.4
学習説明:これは、オブジェクト指向の概念と、特に最初の接触、私は非常によく理解されていない以下の書き込み、ここでは難しいです。

36は、オブジェクトの概念を話す
どのようにオブジェクトの説明のために。
たとえば、オブジェクトが犬にある
犬の基本的な特徴はヘッド、4足、毛深いは、尾を持っている、としていることである
犬が行うことができ、彼は実行することができ、かむことができますものを食べて、物事をかぐことができるというように。

要約すると:
オブジェクト属性= +メソッドクラスは、より正確なポイントであるかもしれない、ので、そのクラス、クラス。
クラスの中国の意味は次のとおりです。同様には次のように魅了しています。人のクラス。何それは正しい、などのアルコールと同じ機能、の人を持っているので、人々のグループは、飲み物に愛が、彼らはこのプロパティを飲むのが大好きという、彼らはこの能力の方法を飲む必要があります。
オブジェクトの概念は非常に広い、Pythonの関数、メソッド、オブジェクトと呼ばれることができるもの変数です。だから、Pythonはどこにでもオブジェクトです。

  • クラスの定義
#下面就定义了“狗”类
#记住:Python中类名首字母要大写,函数的首字母小写,这样就容易区别了
class  Dog:
    #属性
    legs=4
    head=1
    mouth=1

    #方法
    def beat(self):
        print('dog can beat ')
    def run(self):
        print('dog can run')
    def smell(self):
         print('dog can smell')
  • 「クラス」コール
>>> 
 RESTART: C:/Users/SNIPER/AppData/Local/Programs/Python/Python37/SniperPyWorks/game4.py 
>>> d=Dog()
>>> d
<__main__.Dog object at 0x0000000002F65B08>
>>> type(d)
<class '__main__.Dog'>
>>> d.legs
4
>>> d.beat
<bound method Dog.beat of <__main__.Dog object at 0x0000000002F65B08>>
>>> d.beat()
dog can beat 
>>> 

OOは何ですか?
オリエントオブジェクトのオブジェクト指向の意味であること

OOの特徴:カプセル化、継承、ポリモーフィズム。

#继承举例说明
>>> class list1(list):
	pass
>>> list2=list1()
>>> list2.append(1)
>>> list2
[1]
#举例说明什么是多态
#定义一个类A
>>> class A:
	def fun(self):
		print('i am A')

#定义一个类B		
>>> class B:
	def fun(self):
		print('i am B')

		
>>> a=A()
>>> b=B()
>>> a.fun()
i am A
>>> b.fun()
i am B
#发现上面同样是fun函数,但是结果不同,所以这就是 多态

オブジェクト指向プログラミング講座37

自己とは何ですか?
Pythonの自己は、このC ++自己ポインタに相当し
、パブリックとプライベート?
Pythonは、擬似プライベートです

第38条は受け継が話す
渡された同様のメイクを、再作成する必要はありません。このアプローチは、継承と呼ばれています。
(親クラスまたはスーパークラスと呼ばれる)ベース・クラスは:継承が呼び出され
、サブカテゴリー:と呼ばれる後継
次のように使用されます。

#DerviedClassName  子类
#BaseClassName     基类(或叫父类,超类 )
class DerviedClassName(BaseClassName):
    ...

栗のために

>>> class Parent:
	def hello(self):
		print('正在调用父类的方法...')

		
>>> class Child(Parent):
	pass

>>> p=Parent()
>>> p.hello()
正在调用父类的方法...
>>> c=Child()
>>> c.hello()
正在调用父类的方法...
>>> 

>>> class Parent:
	def hello(self):
		print('正在调用父类的方法...')

>>> class Child(Parent):
	def hello(self):
		print('正在调用  子类 的方法')

		
>>> 
>>> c=Child()
>>> c.hello()
正在调用  子类 的方法

スーパー機能を使用してください。

多重継承を使用します。

39は、いくつかの概念を話します

組み合わせ

>>> class Classmate:
	def __init__(self,y):
		self.num=y

		
>>> class Teacher:
	def __init__(self,x):
		self.num=x

		
>>> class Classroom:
	def __init__(self,x,y):
		self.teacher=Teacher(x)#实例化
		self.classmate=Classmate(y)#实例化
	def print_num(self):
		print('教室里面有老师 %d 名,学生 %d 名'% (self.teacher.num,self.classmate.num))

>>> classroom=Classroom(1,40)
>>> type(classroom)
<class '__main__.Classroom'>
>>> classroom.print_num
<bound method Classroom.print_num of <__main__.Classroom object at 0x0000000002FAA988>>
>>> classroom.print_num()
教室里面有老师 1 名,学生 40

なお、上記の組み合わせの一例です。一緒にインスタンス化にはいくつかの継承関係は平行関係は、横方向に一般的に、いくつかのクラスではありません。

クラス、オブジェクトクラス、インスタンスオブジェクト

#C是类 定义
>>> class C:
	num=0
#a,b为 实例对象,下面的C是类对象
>>> a=C()
>>>> a.num
0
>>> a.num=10
>>> a.num+=5
>>> a.num
15
>>> b=C()
>>> b.num
0

同じプロパティとメソッドならば、何が起こるのだろう

>>> class C:
	def x(self): #x方法
		print('x!!')
		
>>> c=C()
>>> c.x()
x!!
>>> c.x=1
>>> c.x #查看属性
1
>>> c.x()#查看方法
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    c.x()
TypeError: 'int' object is not callable
#z这里已经报错了

だから、注意を払います:

  • 1は拡張のための継承とメカニズムを組み合わせて使用​​する必要があり、すべてのプロパティとメソッドは、鉱山の内部に考えることができます定義しようとしないでください。
  • 別のスピーチは名詞、動詞メソッドとして属性名を命名します。

バインディング
Pythonのメソッドが呼び出されたインスタンスを可能にするために厳しい要件を必要とし、この制限は、実際のPythonバインディング概念と呼ばれています。

講義40いくつかの関連BIF

#issubclass(class,classinfo)
>>> class A:
	pass

>>> class B(A):
	pass


>>> issubclass(B,A)
True


>>> class C:
	pass

>>> issubclass(B,C)
False
#hasattr(object,name)测试一个对象里面是否有某个属性
#注 attr的全称为attribute ,属性的意思


#getattr(object,name[,default])
#setattr(object,name,value)
#property

公開された81元の記事 ウォン称賛57 ビュー10000 +

おすすめ

転載: blog.csdn.net/hahahahhahha/article/details/104242309