اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر (معدل)

وعليكم السلام

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

def my_function():
    # تعريف الفئة داخل الدالة
    class MyClass:
        def __init__(self, name):
            self.name = name
        
        def display_name(self):
            print("Name:", self.name)

    # استخدام الفئة
    obj = MyClass("John")
    obj.display_name()

# استدعاء الدالة
my_function()

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

مع ذلك، عادةً ما يتم تعريف الفئات على مستوى عالٍ في البرنامج وليس داخل الدوال، ولكن يمكنك تحديد متغيرات ودوال داخل الدوال بشكل طبيعي.

اما  اذ كنت تقصد انك تعرف def داخل class  فذاللك هوا الطبيعي
وهذ مثال علي ذاللك
 

class Car:#تعريف اسم ال class
    def __init__(self, make, model, year): //init دالة وهو اول شي يتم داخل ال class
        self.make = make ## خصائص  ال class
        self.model = model
        self.year = year
        self.is_running = False

    def start_engine(self): # دالة داخل class تؤدي مهما ما 
        self.is_running = True
        print(f"The {self.year} {self.make} {self.model}'s engine is running.")

    def stop_engine(self):#  وهذه دالة اخري 
        self.is_running = False
        print(f"The {self.year} {self.make} {self.model}'s engine is stopped.")

    def honk(self):
        print(f"The {self.year} {self.make} {self.model} is honking!")

# انشاء object من ال class
my_car = Car("Toyota", "Camry", 2022)
friend_car = Car("Honda", "Accord", 2021)

# استدعاء defs داخل ال class
my_car.start_engine()
friend_car.honk()
my_car.stop_engine()

 

تم التعديل في بواسطة Mahmoud Hassan19
  • 0
نشر

بالطبع، يمكنك تعريف الكلاس (Class) داخل دالة (Function) في Python فهذا يعتبر من الأمور الممكنة في لغة Python بسبب طبيعتها الديناميكية وقابليتها للتعامل مع العديد من الهياكل المرنة، وهذا مثال ممكن على ذلك:

def create_class():
    class MyClass:
        def __init__(self, name):
            self.name = name

        def greet(self):
            print("Hello,", self.name)

    return MyClass
# تعريف الكلاس باستخدام الدالة
MyClass1 = create_class()
obj1 = MyClass1("Yasse")
obj1.greet()  # سيطبع: Hello, Yasser
# تعريف كلاس جديدة
MyClass2 = create_class()
obj2 = MyClass2("Yasser")
obj2.greet()  # سيطبع: Hello, Yasser

ففي هذا المثال، تم تعريف الفئة `MyClass` داخل الدالة `()create_class`. ثم تم إرجاع هذه الفئة من الدالة. وعند استدعاء `()create_class`، يتم إنشاء فئة جديدة في كل مرة. وهذا ما يسمح بإنشاء عدة فئات مختلفة باستخدام نفس التعريف الأساسي.

  • 0
نشر

نعم، يمكن تعريف class داخل دالة في لغة Python. ومع ذلك، فإن استخدام class داخل دالة ليس شائعًا وغالبًا ما يتم تجنبه لأسباب عديدة.

def outer_function():
    class ClassName:
        def __init__(self, name):
            self.name = name
        
        def greet(self):
            print(f"Hello, {self.name}!")
    
    obj = ClassName("John")
    obj.greet()

outer_function()

 

  • 0
نشر

تمام , شكراا جدا لحضرتكم

 

طيب هنا لو سمحت انا كانت عاوز اضيف arr1 و arr2 في الداله God  في الكو ده

def God(lst):

    class Person:

        def __init__(self , name=None , gender=None , job=None , age=None):
            self.name = name
            self.gender = gender
            self.job = job
            self.age = age

        def alst(self):
            arr1 = [self.name , self.gender , self.job , self.age]     
            arr2 = [self.name , self.gender , self.job , self.age]     

    man = Person('Ali' , 'Male' , 'Programmer' , 20)
    woman = Person('Yomna' , 'Female' , 'Doctor' , 16)
    man.alst()
    woman.alst()


God(arr1 , arr2)   

 

في السطر الاخير arr1 , arr2 مش ظهر خالص

  • 0
نشر
بتاريخ 14 ساعة قال Ail Ahmed:

تمام , شكراا جدا لحضرتكم

 

طيب هنا لو سمحت انا كانت عاوز اضيف arr1 و arr2 في الداله God  في الكو ده

def God(lst):

    class Person:

        def __init__(self , name=None , gender=None , job=None , age=None):
            self.name = name
            self.gender = gender
            self.job = job
            self.age = age

        def alst(self):
            arr1 = [self.name , self.gender , self.job , self.age]     
            arr2 = [self.name , self.gender , self.job , self.age]     

    man = Person('Ali' , 'Male' , 'Programmer' , 20)
    woman = Person('Yomna' , 'Female' , 'Doctor' , 16)
    man.alst()
    woman.alst()


God(arr1 , arr2)   

 

في السطر الاخير arr1 , arr2 مش ظهر خالص

أولاً أرجو استخدام اسم دالة مناسب غير God، فالأمر ليس هين، الاسم الجديد في الشرح هو get_combined_list.

ولا يتم دمج القوائم arr1 و arr2 في الدالة get_combined_list لأنك لم ترسلها كوسيطات عند استدعاء الدالة.

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

كالتالي:

def get_combined_list(lst1, lst2):

    class Person:

        def __init__(self , name=None , gender=None , job=None , age=None):
            self.name = name
            self.gender = gender
            self.job = job
            self.age = age

        def alst(self):
            arr1 = [self.name , self.gender , self.job , self.age]     
            arr2 = [self.name , self.gender , self.job , self.age]     
            
            # دمج القوائم arr1 و arr2
            combined_arr = arr1 + arr2

            return combined_arr

    man = Person('Ali' , 'Male' , 'Programmer' , 20)
    woman = Person('Yomna' , 'Female' , 'Doctor' , 16)

    combined_arr = man.alst() + woman.alst()

    get_combined_list(combined_arr, combined_arr)

أو تستطيع تعديل الدالة get_combined_list  لتلقي قائمة واحدة فقط، وداخلها قم بإنشاء قائمتين جديدتين arr1 و arr2 وقم بتعبئتهما بقيم القائمة التي تم إرسالها كوسيط، ثم دمج القوائم arr1 و arr2 في قائمة واحدة.

  • 0
نشر
بتاريخ 3 ساعة قال Mustafa Suleiman:

أولاً أرجو استخدام اسم دالة مناسب غير God، فالأمر ليس هين، الاسم الجديد في الشرح هو get_combined_list.

 

حضرتك معك حق والله انا كمان قولت كده

بس ده كان سوال كده من موقع codewars

شكرااا جدا لحضرتك

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...