类初始化的参数可以是任何形式
一般情况下,类传入的初始化参数都是 int str
class BirthDate: def __init__(self, year, month, day): self.year = year self.month = month self.day = day
类实例化:
b1 = BirthDate('1995', '1', '27') print(b1.__dict__) # {'year': '1995', 'month': '1', 'day': '27'}
传入的是字符串。
实际上STR本生也是一个一个实例, 所有,类的初始化都可以传入实例
class Teacher: def __init__(self, name, gender, birth): self.name = name self.gender = gender self.birth = birth
class BirthDate:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
birth 作为Teacher的一个参数,我们把BirthDate的实例作为实参传给birth
p1 = Teacher('egon', 'male', BirthDate('1995', '1', '27'), )
print(p1.__dict__)
{'name': 'egon', 'gender': 'male',
'birth': <__main__.BirthDate object at 0x0000000001DC6B50>}
print(p1.birth.year,p1.birth.month,p1.birth.day)
>>>1995 1 27
那么是否可以把其他任何对象都传给形参了, 包括类这个对象? 事实上是可以的
p1 = Teacher('egon', 'male', BirthDate)
print(p1.__dict__)
{'name': 'egon', 'gender': 'male', 'birth': <class '__main__.BirthDate'>}
p2 = p1.birth('1995', '1', '27')
print(p2.year)
>>>1995
比较一下, 一个是传入类。 一个是传入实例
传入类,还是需要实例化。才能调用被传入者的数据属性和函数属性
所以传入实例比较简单。
还有一个例子, 比较特别
在初始化中,没有对于变量赋值而是,通过self.直接转到函数属性中作判断
class Person: def __init__(self, name='None', age=20, sex='male'): self.inputname(name) self.inputage(age) self.inputsex(sex) def inputname(self, name): if not isinstance(name, str): raise Exception('name must be a string') self.name = name def inputage(self, age): if not isinstance(age, int): raise Exception('age must be an int') self.age = age def inputsex(self, sex): if not sex in ['male', 'female']: raise Exception("sex must be 'male' or 'female'") self.sex = sex def show(self): print(self.name,self.age,self.sex)
p1=Person('alex',100',female')
p1.show()
class Person: def __init__(self, inputname, inputage, inputsex): self.name =inputname self.age = inputage self.sex = inputsex def show(self): print(self.name,self.age,self.sex) def inputname(name=''): if not isinstance(name, str): raise Exception('name must be a string') return name def inputage(age=20): if not isinstance(age, int): raise Exception('age must be an int') return age def inputsex(sex='male'): if not sex in ['male', 'female']: raise Exception("sex must be 'male' or 'female'") return sex p1=Person(inputname('alex'),inputage(100),inputsex('female')) p1.show()