Я пытаюсь понять разницу между атрибутами экземпляра и атрибутами и атрибутами класса. У меня есть код ниже, и я пытаюсь различить эти факторы.

class Student:
    firstname = ""
    lastname = ""
    ucid = ""
    department = ""
    nationality = ""
    courses = {}

    def __init__(self, fname, lname, ucid, dept, n):
        self.firstname = fname
        self.lastname = lname
        self.ucid = ucid
        self.department = dept
        self.nationality = n
        self.courses = {}

    def setName(self, fname, lname):
        self.firstname = fname
        self.lastname = lname

    def setDepartment(self, d):
        self.department = d

    def setUcid(self, u):
        self.ucid = u

    def setNationality(self, n):
        self.nationality = n

    def addCourse(self, coursename, gpa):
        self.courses[coursename] = gpa

    def printAll(self):
        print("The name of the student is ", self.firstname, self.lastname)
        print("nationality and UCID: ", self.nationality, self.ucid)
        print("Department: ", self.department)
        print("Result: ")
        for key in self.courses.keys():
            print(key, self.courses[key])

        print("--------------------\n")

s1=Student("Beth","Bean","30303","Computer Science","International")
s1.addCourse("SCIENCE",3.75)
s1.printAll()
s2=Student("Mac","Miller","30303","Envr Science","American")
s2.addCourse("MATH",4.00)
s2.printAll()

Насколько я понял, атрибуты будут такими: firstname,lastname,ucid,department,nationality,courses Но я не знаю, что такое instance attributes и class attributes.

0
haribo11 8 Дек 2020 в 04:48

1 ответ

Лучший ответ

Я пытаюсь понять разницу между атрибутами экземпляра и атрибутами и атрибутами класса.

Должно быть два атрибута, class attribute, instance attribute. или instance attribute & none-instance attribute для удобства.

instance attribute

  • эти вещи активируются только при вызове __init__.
  • вы можете получить доступ к thenm только после инициализации класса, что обычно обозначается как self.xxx.
  • и методы в классе с self в качестве первого параметра (обычно), эти функции являются методами экземпляра, и вы можете получить доступ только после инициализации класса.
  • и методы в классе с @property deco, они являются атрибутами экземпляра
common seen instance attribute 

class Name(object):
   def __init__(self):
        self.age = 100
   def func(self):
       pass
   @property
   def age(self):
       return self.age

class attribute

non-instance attribute или static attribute, как вы это называете

  • эти вещи остаются активными вместе с Классом.
  • Это означает, что вы можете получить к ним доступ, когда захотите, например __init__, даже в __new__.
  • они могут вызываться как Class, так и instance.
common seen class attribute 

class Name(object):
   attr = 'Im class attribute'

Есть кое-что еще, что вам, возможно, следует знать, class method, которое остается активированным вместе с Class, но разница в том, что class method не может быть вызван экземпляром, а только Class. пример здесь

class Name(object)
   attr = 'Im class attribute'
   @classmethod
   def get_attr(cls):
       return cls.attr

Вывод

"атрибут класса" может вызываться как экземпляром, так и классом

"атрибут экземпляра" может быть вызван только экземпляром.

0
tomy0608 8 Дек 2020 в 05:06