zoukankan      html  css  js  c++  java
  • 类初始化的参数可以是任何形式

    一般情况下,类传入的初始化参数都是 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()
  • 相关阅读:
    Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory
    install dns server on ubuntu
    vs code 终端字体间距过大(全角的样子)
    install ubuntu on raspberry pi 4b
    JavaScript 深入了解基本类型和引用类型的值
    【豆科基因组】绿豆Mungbean, Vigna radiata苏绿基因组预印
    【豆科基因组】豇豆Cowpea,Vigna unguiculata [L.] Walp.基因组2019PJ
    【豆科基因组】小豆(红豆)adzuki bean, Vigna angularis基因组2015
    【豆科基因组】绿豆Mungbean, Vigna radiata基因组2014NC
    Linux服务器查看个人硬盘配额
  • 原文地址:https://www.cnblogs.com/vincent-sh/p/12779180.html
Copyright © 2011-2022 走看看