Latest web development tutorials

Python3 الشيئية

الثعبان قد تم تصميمه منذ البداية هي لغة وجوه المنحى، وعلى هذا النحو، إنشاء فئة والكائنات في بيثون من السهل جدا. هذا القسم ونحن سوف بالتفصيل البرمجة وجوه المنحى في بيثون.

إذا لم تكن قد تعرضت لوجوه المنحى لغة البرمجة، فإنك قد تحتاج أولا أن نفهم بعض من السمات الأساسية لغات وجوه المنحى، التي تشكلت في ذهن داخل المفهوم الأساسي من وجوه المنحى، والتي تساعدك على أكثر سهولة تعلم بايثون وجوه المنحى البرمجة.

بعد ذلك، دعونا نلقي فهم بسيط من تحت بعض الملامح الأساسية وجوه المنحى.


الشيئية نظرة عامة على التكنولوجيا

  • الفئة (الفئة): يستخدم لوصف مجموعة لها نفس الخصائص وطرق الكائنات. وهو يحدد مجموعة من الخصائص والأساليب المشتركة على كل كائن. الكائنات مثيلات الفئات.
  • المتغيرات الدرجة: متغيرات الفئة هو شائع في جميع أنحاء الكائن مثيل. المتغيرات فئة محددة وخارج وظيفة في الفئة في. المتغيرات فئة لا تستخدم عادة كمتغيرات سبيل المثال.
  • أعضاء البيانات: المتغيرات فئة أو المتغيرات سبيل المثال بالنسبة للطبقات معالجة البيانات المرتبطة والأشياء سبيل المثال.
  • تجاوزات: إذا كنت لا تستطيع ان تلبي احتياجات فئة فرعية يرث من أسلوب فئة الوالدين، ويمكن إعادة كتابة، وهي عملية تسمى طريقة تراكب (تجاوز)، المعروف أيضا باسم طريقة الرئيسي.
  • أمثلة من المتغيرات: المتغيرات المحددة في طريقة، إلا أن دور الطبقة من الحالة الراهنة.
  • الميراث: وهذا هو فئة مشتقة (فئة مشتقة) ترث الفئة الأساسية (الفئة الأساسية) الحقول والطرق. كما يسمح الميراث كائن فئة مشتقة كعلاج كائن الفئة الأساسية. على سبيل المثال، هناك مثل هذا التصميم: نوع الكائن الذي مشتق من فئة الكلب الحيوان، الذي هو التناظرية "هو (هي-أ)" علاقة (الشكل سبيل المثال، هو الكلب الحيوان).
  • مثيل: إنشاء مثيل من فئة، فئة الكائن محددة.
  • الطرق: وظائف المعرفة من قبل الطبقة.
  • الكائن: البيانات مثيل هيكل من خلال تعريف الفئة. وتشمل كائنات البيانات عضوين (الفئة و المثيل المتغيرات) والأساليب.

ولغات البرمجة الأخرى، بيثون كحد أدنى من بناء الجملة ودلالات الوضع الجديد للانضمام إلى آلية الطبقة.

دروس الثعبان في البرمجة كائنية التوجه توفر جميع وظائف أساسية هي: آلية وراثة فئة تسمح فئات أساسية متعددة، الفئة الأساسية في الفئات المشتقة يمكن تجاوز أي الأساليب، يمكنك استدعاء الأسلوب الفئة الأساسية التي تحمل الاسم نفسه.

أشياء يمكن أن تحتوي على أي عدد ونوع البيانات.

تعريف الفئة

الصيغة كالتالي:

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

بعد إنشاء مثيل الفئة، يمكنك استخدام خصائصه، في الواقع، بعد إنشاء فئة، يمكنك الوصول إلى خصائصه عن طريق اسم الفئة.

كائن الفئة

كائنات فئة تدعم نوعين من العمليات: إشارات السمة ومثيل.

السمة المراجع استخدام بايثون لجميع السمة يحيل الىبناء الجملة القياسية: obj.name.

بعد تم إنشاء كائن فئة سمة فئة مساحة كل الأسماء هي الأسماء الصالحة. لذا، إذا بدا تعريف فئة مثل هذا:

#!/usr/bin/python3

class MyClass:
    """一个简单的类实例"""
    i = 12345
    def f(self):
        return 'hello world'

# 实例化类
x = MyClass()

# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())

مثيل الفئة:

# 实例化类
x = MyClass()
# 访问类的属性和方法

يخلق فوق مثيل جديد من فئة ويسند هذا الكائن إلى المتغير x المحلي، الأشعة كائن فارغ.

إخراج البرنامج المذكور أعلاه هو:

MyClass 类的属性 i 为: 12345
MyClass 类的方法 f 输出为: hello world

العديد من الفئات مثل لإنشاء كائنات في الحالة الأولية المعروفة. لذلك قد فئة تعرف على __ اسمه __init () طريقة خاصة (منشئ)، مثل هذا:

def __init__(self):
    self.data = []

الطبقة تعرف __init __ () الأسلوب، ثم المشغل الطبقة مثيل سيدعو __init __ () طريقة تلقائيا. حتى في هذا المثال، يمكن أن يكون لإنشاء مثيل جديد:

x = MyClass()

بالطبع، قد يكون __init طريقة __ () الحجج، المعلمات __init __ () يتم تمريرها إلى مشغل الطبقة مثيل. على سبيل المثال:

>>> class Complex:
...     def __init__(self, realpart, imagpart):
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)

أساليب الفئة

في الداخل الأرضية، ويمكن تعريف الكلمة استخدام مواطنه كوسيلة الطبقة والتعاريف المختلفة والوظائف العامة، ويجب أن تتضمن أساليب الفئة الذات المعلمة، وكما المعلمة الأولى:

#!/usr/bin/python3

#类定义
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))

# 实例化类
p = people('w3big',10,30)
p.speak()

إخراج البرنامج المذكور أعلاه هو:

w3big 说: 我 10 岁。

وراثة

كما يدعم بيثون الميراث الطبقة، إذا لا لغة دعم الميراث، وفئة لها معنى يذكر. تعريف فئة مشتقة على النحو التالي:

class DerivedClassName(BaseClassName1):
    <statement-1>
    .
    .
    .
    <statement-N>

لاحظ أن ترتيب الفئة الأساسية بين قوسين، إذا كانت الفئة الأساسية له نفس اسم الأسلوب، ولكن دون تحديد الفئات الفرعية، الثعبان من اليسار إلى طريقة البحث الصحيح الذي لم يتم العثور في فئة فرعية، من اليسار إلى اليمين لتجد وتتضمن الفئة الأساسية الأساليب.

BaseClassName (على سبيل المثال اسم الفئة الأساسية) يجب أن تكون محددة في نطاق فئة مشتقة. بالإضافة إلى فصول، يمكنك استخدام التعبير، يتم تعريف الفئة الأساسية في وحدة أخرى، وهو أمر مفيد جدا ل:

class DerivedClassName(modname.BaseClassName):

أمثلة

#!/usr/bin/python3

#类定义
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):
    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()

إخراج البرنامج المذكور أعلاه هو:

ken 说: 我 10 岁了,我在读 3 年级

الوراثة متعددة

يدعم بيثون شكل محدود من وراثة متعددة. تعريف متعددة الطبقة الميراث يبدو على النحو التالي:

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

لاحظ أن النظام في الفئة الأصل قوسين، إذا الفئة الأصل لديهم نفس اسم الأسلوب، ولكن دون تحديد الفئات الفرعية، الثعبان من اليسار إلى طريقة البحث الصحيح الذي لم يتم العثور في فئة فرعية، من اليسار إلى اليمين لتجد وتتضمن الفئة الأصل الأساليب.

#!/usr/bin/python3

#类定义
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):
    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))

#另一个类,多重继承之前的准备
class speaker():
    topic = ''
    name = ''
    def __init__(self,n,t):
        self.name = n
        self.topic = t
    def speak(self):
        print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))

#多重继承
class sample(speaker,student):
    a =''
    def __init__(self,n,a,w,g,t):
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)

test = sample("Tim",25,80,4,"Python")
test.speak()   #方法名同,默认调用的是在括号中排前地父类的方法

إخراج البرنامج المذكور أعلاه هو:

我叫 Tim,我是一个演说家,我演讲的主题是 Python

تجاوز الأسلوب

إذا كانت وظيفة لك هي الطريقة الفئة الأصل لا يمكن أن تلبي الاحتياجات الخاصة بك، يمكنك إعادة كتابة من طريقة الطبقة الأصل في فئة فرعية، والأمثلة على النحو التالي:

#!/usr/bin/python3

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

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

c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法

إخراج البرنامج المذكور أعلاه هو:

调用子类方法

سمات الطبقة وأساليب

الطبقة الملكية الخاصة

__private_attrs: بداية ليؤكد تفيد بأن العقار الخاص والتي لا يمكن استخدامها أو الوصول إليها مباشرة في فئة خارجيا. النفس .__ private_attrs عند استخدامها ضمن أسلوب فئة.

أساليب الفئة

في الداخل الأرضية، ويمكن تعريف الكلمة استخدام مواطنه كوسيلة فئة مع التعريف العام لوظائف مختلفة، يجب أن تتضمن أساليب الفئة الذات المعلمة، وكما المعلمة الأولى

أساليب خاصة من الدرجة

__private_method: أول السطر اثنين، وأعلن طريقة وسائل خاصة في الطبقة لا يمكن استدعاء الخارج. slef دعوة الطبقة الداخلية .__ private_methods.

أمثلة

المثال الملكية الخاص من فئة على النحو التالي:

#!/usr/bin/python3

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)  # 报错,实例不能访问私有变量

إخراج البرنامج المذكور أعلاه هو:

1
2
2
Traceback (most recent call last):
  File "test.py", line 16, in <module>
    print (counter.__secretCount)  # 报错,实例不能访问私有变量
AttributeError: 'JustCounter' object has no attribute '__secretCount'

المثال أسلوب خاص من الطبقة على النحو التالي:

#!/usr/bin/python3

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('本教程', 'www.w3big.com')
x.who()        # 正常输出
x.foo()        # 正常输出
x.__foo()      # 报错

نتائج الأمثلة المذكورة أعلاه:

طرق الملكية الطبقة:

  • __init__: ويسمى منشئ عند إنشاء كائن
  • __del__: المدمر، الكائنات الإفراج
  • __repr__: الطباعة، وتحويل
  • __setitem__: وفقا للتكليف مؤشر
  • __getitem__: يحصل على قيمة في المؤشر
  • __len__: الحصول على طول
  • __cmp__: عملية المقارنة
  • __call__: استدعاء دالة
  • __add__: إضافة العملية
  • __sub__: الطرح
  • __mul__: الضرب
  • __div__: عملية القسمة
  • __mod__: مشغل الباقي
  • __pow__: دعا حزب

الحمولة الزائدة المشغل

كما يدعم بيثون الحمولة الزائدة المشغل، ما يمكن مثقلة طرق الملكية الطبقة، والأمثلة على النحو التالي:

#!/usr/bin/python3

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b

   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)

نتائج تنفيذ التعليمات البرمجية أعلاه هي كما يلي:

Vector(7,8)