Latest web development tutorials

وجوه المنحى بيثون

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

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

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


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

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

إنشاء فئة

استخدام العبارة الفئة لإنشاء فئة جديدة، بعد انتهاء اليوم الدراسي، واسم الفئة ينتهي بنقطتين، والأمثلة التالية:

class ClassName:
   '类的帮助信息'   #类文档字符串
   class_suite  #类体

الطبقة مساعدة يمكن عرضها من قبل اسم_الفئة .__ doc__.

class_suite تتألف من أفراد الطبقة أو أسلوب سمات البيانات.

أمثلة

ما يلي هو مثيل فئة بيثون بسيط:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Employee:
   '所有员工的基类'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary
  • empCount المتغير هو متغير فئة، وسيتم تقاسم قيمتها بين كافة مثيلات هذه الفئة. يمكنك استخدام الوصول Employee.empCount داخل الطبقة أو الفئة خارجية.
  • وتسمى طريقة الطريقة الأولى __init __ () طريقة أسلوب خاص، منشئ أو التهيئة الدرجة عند إنشاء مثيل من هذه الفئة سوف استدعاء الأسلوب

إنشاء مثيل كائن

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

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)

خصائص الوصول

يمكنك استخدام نقطة (.) الملكية للوصول إلى كائن. الوصول إلى متغير فئة مع اسم الفئة على النحو التالي:

emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

المثال الكامل:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Employee:
   '所有员工的基类'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

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

Name :  Zara ,Salary:  2000
Name :  Manni ,Salary:  5000
Total Employee 2

يمكنك إضافة أو حذف أو تعديل خصائص الطبقة على النحو التالي:

emp1.age = 7  # 添加一个 'age' 属性
emp1.age = 8  # 修改 'age' 属性
del emp1.age  # 删除 'age' 属性

يمكنك أيضا الوصول إلى خصائص استخدام الوظائف التالية:

  • getattr (الكائنات، اسم [، والتقصير]): خاصية كائنات الوصول.
  • hasattr (الكائنات، الاسم): تحقق ما إذا كان هناك سمة.
  • setattr (الكائنات والاسم والقيمة): تعيين خاصية. حالة عدم وجود الممتلكات، وإنشاء خاصية جديدة.
  • delattr (الكائنات، الاسم): حذف السمات.
hasattr(emp1, 'age')    # 如果存在 'age' 属性返回 True。
getattr(emp1, 'age')    # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(empl, 'age')    # 删除属性 'age'

بيثون المدمج في سمة فئة

  • __dict__: سمات فئة (بما في ذلك القاموس، السمة بيانات التركيب الطبقي)
  • __doc__: فئة ثيقة سلسلة
  • __name__: اسم الفئة
  • __module__: الوحدة النمطية حيث تعريف الفئة (الاسم الكامل هو ". __main __ اسم_الفئة، إذا كان موجودا في الدرجة في وحدة mymod المستوردة، ثم اسم_الفئة .__ module__ المساواة mymod)
  • __bases__: جميع الطبقات من العنصر الأصلي (تضم الفئة الأصل تتألف من جميع الصفوف)

يدعو الثعبان المدمج في الأمثلة سمة الفئة هي كما يلي:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Employee:
   '所有员工的基类'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

print "Employee.__doc__:", Employee.__doc__
print "Employee.__name__:", Employee.__name__
print "Employee.__module__:", Employee.__module__
print "Employee.__bases__:", Employee.__bases__
print "Employee.__dict__:", Employee.__dict__

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

Employee.__doc__: 所有员工的基类
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'displayCount': <function displayCount at 0x10a939c80>, 'empCount': 0, 'displayEmployee': <function displayEmployee at 0x10a93caa0>, '__doc__': '\xe6\x89\x80\xe6\x9c\x89\xe5\x91\x98\xe5\xb7\xa5\xe7\x9a\x84\xe5\x9f\xba\xe7\xb1\xbb', '__init__': <function __init__ at 0x10a939578>}

يتم تدمير الكائن الثعبان (جمع القمامة)

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

في السجل الداخلي بيثون من كافة الكائنات باستخدام أرقام كل من المراجع.

لمتغيرات تتبع الداخلية، ودعا عداد مرجع.

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

a = 40      # 创建对象  <40>
b = a       # 增加引用, <40> 的计数
c = [b]     # 增加引用.  <40> 的计数

del a       # 减少引用 <40> 的计数
b = 100     # 减少引用 <40> 的计数
c[0] = -1   # 减少引用 <40> 的计数

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

أمثلة

المدمر __del__، __ يسمى del__ عندما يتم تدمير الكائن، عندما لم تعد تستخدم الكائن، __ طريقة del__ لتشغيل:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Point:
   def __init__( self, x=0, y=0):
      self.x = x
      self.y = y
   def __del__(self):
      class_name = self.__class__.__name__
      print class_name, "销毁"

pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # 打印对象的id
del pt1
del pt2
del pt3

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

3083401324 3083401324 3083401324
Point 销毁

ملاحظة: عادة ما تحتاج إلى تعريف فئة في ملف منفصل،

الميراث الطبقة

يتم إحضارها واحدة من الفوائد الرئيسية لبرمجة كائنية التوجه لإعادة إعادة استخدام التعليمات البرمجية لتحقيق واحد من هؤلاء هو من خلال آلية الميراث. ورثت نوع وسلالة مفهومة تماما العلاقة بين الطبقات في.

التحذير: الميراث بناء الجملة فئة مشتقة اسم الفئة (اسم الفئة الأساسية): // ... كتابة اسم الفئة الأساسية بين قوسين، عندما الفئة الأساسية هي تعريف الفئة، من بين الصفوف المحددة.

في خلافة الثعبان من بعض الميزات:

  • 1: في التكوين التالية (__init __ () طريقة) فئة تشنغ Zhongji لن يتم التذرع تلقائيا، فإنه يتطلب متخصصة تسمى شخصيا في منشئ الفئة المشتقة منها.
  • 2: عند استدعاء الأسلوب الفئة الأساسية، تحتاج إلى إضافة بادئة اسم الفئة من الفئة الأساسية، والحاجة إلى تحقيق المتغيرات المعلمة النفس. لا تحتاج إلى جلب المعلمة النفس تختلف عن الدعوة وظيفة عادية في فئة
  • 3: بيثون دائما العثور على أول نوع مماثل من النهج، إذا لم تتمكن من العثور على طريقة المقابلة في فئة مشتقة، وبدأت في البحث واحدا تلو الآخر إلى الفئة الأساسية. (استدعاءات الأسلوب الأول أن نجد في هذه الفئة، إلا أن إيجاد لإيجاد الفئة الأساسية).

إذا كان العمود أكثر من فئة في الصفوف (tuple) الميراث، ومن ثم دعا "وراثة متعددة."

بناء الجملة:

إعلان من فئة مشتقة، على غرار الطبقة الأم، ثم يرث قائمة الفئة الأساسية مع اسم الفئة، على النحو التالي:

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

على سبيل المثال:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Parent:        # 定义父类
   parentAttr = 100
   def __init__(self):
      print "调用父类构造函数"

   def parentMethod(self):
      print '调用父类方法'

   def setAttr(self, attr):
      Parent.parentAttr = attr

   def getAttr(self):
      print "父类属性 :", Parent.parentAttr

class Child(Parent): # 定义子类
   def __init__(self):
      print "调用子类构造方法"

   def childMethod(self):
      print '调用子类方法 child method'

c = Child()          # 实例化子类
c.childMethod()      # 调用子类的方法
c.parentMethod()     # 调用父类方法
c.setAttr(200)       # 再次调用父类的方法
c.getAttr()          # 再次调用父类的方法

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

调用子类构造方法
调用子类方法 child method
调用父类方法
父类属性 : 200

يمكنك ترث فئات متعددة

class A:        # 定义类 A
.....

class B:         # 定义类 B
.....

class C(A, B):   # 继承类 A 和 B
.....

يمكنك استخدام issubclass () أو طريقة isinstance () للكشف.

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

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

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

على سبيل المثال:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

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

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

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

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

调用子类方法

طرق مؤسسة طاقتها

يسرد الجدول التالي بعض من السمات الشائعة التي يمكنك تجاوز في صفك:

لا. طريقة وصفت مجرد دعوة و
1 __init__ (النفس [، وسائط ...] )
ببساطة استدعاءالأسلوب المنشئ:الكائنات = اسم_الفئة (وسائط)
2 __del __ (النفس)
تالفة، حذفمكالمةطريقة بسيطةوجوه:ديل الكائنات
3 __repr __ (النفس)
تحويل شكل لمترجم لقراءةاستدعاءأسلوببسيط:repr (الكائنات)
4 __str __ (النفس)
للقيمة في شكل مناسب للقراءة الإنساناستدعاءأسلوببسيط:شارع (الكائنات)
5 __cmp__ (النفس، خ)
كائن بسيط نسبيااستدعاء الأسلوب:CMP (الكائنات، خ)

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

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

#!/usr/bin/python

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)

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

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

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

أساليب الفئة

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

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

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

أمثلة

#!/usr/bin/python
# -*- coding: UTF-8 -*-

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 17, in <module>
    print counter.__secretCount  # 报错,实例不能访问私有变量
AttributeError: JustCounter instance has no attribute '__secretCount'

لا يسمح الثعبان بيانات خاصة وصول الطبقة مثيل، ولكن يمكنك استخدام سمات وصول object._className__attrName، التعليمة البرمجية التالية سوف تحل محل السطر الأخير من التعليمات البرمجية أعلاه رمز:

.........................
print counter._JustCounter__secretCount

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

1
2
2
2