تمت الإجابة encapsulation

تم تحميل الصفحة في 1,7111779 ثانية
encapsulation
الحالة
مغلق و غير مفتوح للمزيد من الردود.

مؤتمن غيث

مُراقب عام التواصل الإجتماعي
طاقم الإدارة
إنضم
22 أبريل 2013
المشاركات
8,555
الإعجابات
11,249
النقاط
100
الإقامة
iraq
سلام عليكم ورحمة الله وبركاته

في بايثون oop ( encapsulation )
لما يتم عملها عن طريق ليست وليس قاموس
كيف يتم تعديل على قيم المتغير الاصلي في كونستراكتر عند اعطاء بروجكت للاكلاس ؟
 

مؤتمن غيث

مُراقب عام التواصل الإجتماعي
طاقم الإدارة
إنضم
22 أبريل 2013
المشاركات
8,555
الإعجابات
11,249
النقاط
100
الإقامة
iraq
تقصد داخل private members ؟

ممكن يفيدك
Encapsulation
هذه في حال قاموس
class num :
def __init__(self,**m):
self.mm = m
def setA (self,aa):
self.mm ["s"] = aa
def getA (self):
return self.mm ["s"]
m1 = num (s="mutmn") # هنا اقدر اصل للمتغير الأصلي واعدل عليه في حالة قاموس
print(m1.getA())

قصدي في حال الليست مثل

class num :
def __init__(self,**m):
self.mm = m
def setA (self,aa):
self.mm [1] = aa
def getA (self):
return self.mm [1]

m1 = num ()
print(m1.getA())

بهذة الحالة كيف اصل لل 1 واقوم باعطائه قيمة داخل m1 = num ()
مثل m1 = num (s="mutmn")
 

Mariio

.:: مُراقب أقسام البرمجة ::.
rankrankrankrankrankrank
طاقم الإدارة
إنضم
1 مايو 2007
المشاركات
4,883
الإعجابات
4,431
النقاط
133
الإقامة
USA
هذه في حال قاموس
class num :
def __init__(self,**m):
self.mm = m
def setA (self,aa):
self.mm ["s"] = aa
def getA (self):
return self.mm ["s"]
m1 = num (s="mutmn") # هنا اقدر اصل للمتغير الأصلي واعدل عليه في حالة قاموس
print(m1.getA())

قصدي في حال الليست مثل

class num :
def __init__(self,**m):
self.mm = m
def setA (self,aa):
self.mm [1] = aa
def getA (self):
return self.mm [1]

m1 = num ()
print(m1.getA())

بهذة الحالة كيف اصل لل 1 واقوم باعطائه قيمة داخل m1 = num ()
مثل m1 = num (s="mutmn")
في السي بلس بلس تستطيع الوصول الى المتغير من اي مكان تريد وتغير قيمته
لا اعلم اذا نفس الشي بلبايثون
انتضر الاخ عبدالله
 

مؤتمن غيث

مُراقب عام التواصل الإجتماعي
طاقم الإدارة
إنضم
22 أبريل 2013
المشاركات
8,555
الإعجابات
11,249
النقاط
100
الإقامة
iraq
في السي بلس بلس تستطيع الوصول الى المتغير من اي مكان تريد وتغير قيمته
لا اعلم اذا نفس الشي بلبايثون
انتضر الاخ عبدالله
ال encapsulation هية ك مصطلح برمجي في بايثون معناه انه تحمي الكود الخاص بك بحيث لا يستطيع احد يصل للمتغيرات الخاصة بك في حال تم كسر برنامج وتعديل عليه اعلى مستوياته هوة استعمال list بس سمعت انه فيه طريقة للوصل حتة في list لهيك حابب اعرفها
 

Mariio

.:: مُراقب أقسام البرمجة ::.
rankrankrankrankrankrank
طاقم الإدارة
إنضم
1 مايو 2007
المشاركات
4,883
الإعجابات
4,431
النقاط
133
الإقامة
USA
ال encapsulation هية ك مصطلح برمجي في بايثون معناه انه تحمي الكود الخاص بك بحيث لا يستطيع احد يصل للمتغيرات الخاصة بك في حال تم كسر برنامج وتعديل عليه اعلى مستوياته هوة استعمال list بس سمعت انه فيه طريقة للوصل حتة في list لهيك حابب اعرفها
في السي بلس بلس يوجد private members
لا يمكن الوصول الى هذه المتغيرا داخل الكلاس الا اذا صنعت فونكشن داخل الكلاس نفسه ومن خلال هذا الفونكشن تغير قيم المتغيرات

هذا مثال بلسي بلس بلس
C++:
#include <iostream>
using namespace std;

class Adder {
   public:
      // constructor
      Adder(int i = 0) {
         total = i;
      }
      
      // interface to outside world
      void addNum(int number) {
         total += number;
      }
      
      // interface to outside world
      int getTotal() {
         return total;
      };
  
   private:
      // hidden data from outside world
      int total;
};

int main() {
   Adder a;
  
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}
 
إنضم
27 ديسمبر 2006
المشاركات
2,371
الإعجابات
1,524
النقاط
113
سلام عليكم ورحمة الله وبركاته

في بايثون oop ( encapsulation )
لما يتم عملها عن طريق ليست وليس قاموس
كيف يتم تعديل على قيم المتغير الاصلي في كونستراكتر عند اعطاء بروجكت للاكلاس ؟
وعليكم السلام ورحمه الله مؤتمن :15:

بصراحة ما فهمت السوال الاول بس حسب الكود الي فوق فهمت انك تريد تضيف في لست موجودة في كلاس او شيء كذا ؟
جرب هذا الكود كمثال يمكن يفيدك :
Python:
class num:
    def __init__(self,**m):
        self.mm = m
    def setA (self,indx,val): # set value at specific index
        self.mm [indx] = val
    def getA (self,indx): # get value at specific index
        return self.mm [indx]
m = num()

############ Setters ############

m.setA(0,'a')
m.setA(1,'b')
m.setA(2,'c')
m.setA(3,'d')
m.setA(4,'e')
m.setA(5,'f')

############ Getters ############

m.getA(0)
m.getA(1)
m.getA(2)
m.getA(3)
m.getA(4)
m.getA(5)
اما الاجابة على السوال الثاني هي استخدام ما يسمى بـالـ getters and setters
الي هي موضحه في الكود الثالي كمثال:
Python:
class num:
    def __init__(self):
        self.mynumber = 0
    def set_number(self,new_number):
        self.mynumber = new_number
    def print(self):
        print(self.mynumber)
mm = num()
mm.print()
mm.set_number(5)
mm.print()
مثل ما تلاحظ ان القيمة الاولية في الكونستركتر هي 0
نستخدم الفنكشن set_number علشان نغير قيمة 0 الى 5


اتمنى اني اكون اجبت على سوالك، واذا فيه اي مشكلة لا تترد في طرح اي سؤال :)
 

عـبـدالـله

.:: أبو مـحـمـد ::.
rankrankrankrankrank
إنضم
5 ديسمبر 2013
المشاركات
2,339
الإعجابات
3,100
النقاط
198
هل تقصد تغيير قيمة المتغير في الـ __init__

لاحظ الدالة __add__

سيتضح لك الامر

Python:
class Car:

    def __init__(self,Name):
        self.name = Name

    def __add__(self,Name):
        self.name = Name
        return Car(self.name)

    def __str__(self):
        print("Car: {0}".format(self.name))


if __name__ == '__main__':
    car = Car("Camry")
    car.__add__("Ford")
    car.__str__()

اما بخصوص الـPrivate والـ protected في لغة بايثون يتم استخدامه بعلامة _ للـ protected والـ __ للـ Private

تحتاج توضيح اكثر لكن بوقت لاحق ان شاء الله

مراسلك من الموبايل للاسف :(

بالتوفيق لك
 

عـبـدالـله

.:: أبو مـحـمـد ::.
rankrankrankrankrank
إنضم
5 ديسمبر 2013
المشاركات
2,339
الإعجابات
3,100
النقاط
198
اما بخصوص ال get and set

اتمنى تبحث عن موضوع يخص ال [email protected]
وكيفية عمله مع الداله وعمل setter and getter and deleter

امور متقدمه بالبايثون تفيدك اكثر في فهم اللغه
 

Mariio

.:: مُراقب أقسام البرمجة ::.
rankrankrankrankrankrank
طاقم الإدارة
إنضم
1 مايو 2007
المشاركات
4,883
الإعجابات
4,431
النقاط
133
الإقامة
USA
ممكن اختيار افضل اجابة في حال تم حل المشكله
 
الحالة
مغلق و غير مفتوح للمزيد من الردود.

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 0 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل